2016-07-23 16 views
1

Zur Zeit habe ich die folgenden zwei Probleme:Zurücksetzen Position relativ zur Rotation

  • Die erste Ausgabe ist, dass, wenn ich meine Kameraposition zurückgesetzt Ich muss auch meine Kamera Rotation zurückgesetzt. Dies ist aufgrund der Tatsache, dass meine Kamera Offset ist auf eine Position etwas außerhalb meines Players auf der z und y Achse und offensichtlich diese Werte sollten sich ändern, abhängig von meiner Kamera Rotation, obwohl ich nicht sicher bin, was diese herauszufinden Werte sollten sein.

  • Mein zweites Problem ist, dass meine Rotation eine Raycast verwendet die Mitte den Bildschirm und bestimmen seine Rotation Ursprung zu finden, obwohl es leicht aus der Mitte des Bildschirms zu sein scheint, als wenn sie die Bewegungen Rotation Ursprung dreht auch, wenn es tatsächlich in der Mitte des Bildschirms ist sollte es nicht ganz still sein? Gibt es auch eine bessere und weniger teure Möglichkeit, meine gewünschte Rotation zu erreichen?

Relevant Stück Code:

void RotateCamera() 
{ 
    //Find midle of screen 
    Ray ray = Camera.main.ScreenPointToRay(new Vector3(Screen.width/2, Screen.height/2, 0)); 
    RaycastHit hitInfo; 

    //Checks if ray hit something 
    if (Physics.Raycast(ray, out hitInfo)) 
    { 
     //Rotate left and right 
     if (Input.GetKey(KeyCode.RightArrow)) 
     { 
      transform.RotateAround(hitInfo.point, -Vector3.up, rotationSpeed * Time.deltaTime); 
     } 
     if (Input.GetKey(KeyCode.LeftArrow)) 
     { 
      transform.RotateAround(hitInfo.point, Vector3.up, rotationSpeed * Time.deltaTime); 
     } 
    } 

    //Draws Raycast 
    Debug.DrawRay(ray.origin, ray.direction * 100, Color.yellow); 
} 

void ResetCameraPosition() 
{ 
    //Reset and lock camera position 
    transform.rotation = Quaternion.identity; 
    transform.position = player.transform.position + cameraOffset; 

} 

Image displaying what I mean

+0

Können Sie ein bisschen mehr erklären, was Sie eigentlich die Kamera tun wollen? Ich denke ich bekomme, dass du dich um einen Punkt drehen willst und bei Bedarf auf die aktuelle Ausrichtung des Spielers zurücksetzen willst, aber bitte bestätige es. – Absinthe

+0

Ja, und ein Screenshot oder eine Zeichnung (sogar Programmierer Kunst) würde viel helfen –

+0

@Absinthe Ja, tut mir leid, dass es im Grunde ist ich will die Kamera um die Mitte des Bildschirms drehen, so im Grunde dreht es sich um was auch immer es ist Wenn ich mich perfekt ansehe, ist der Code, den ich gerade mache, okay, aber sein Fokuspunkt bewegt sich leicht, wenn er rotiert, und es scheint eine teure Methode zu sein, ihn zu berechnen. Und für den Reset-Rotationsteil möchte ich meine Kamera so einstellen, dass sie bereits gedreht ist, obwohl sie so positioniert ist, dass sie meinen Charakter sehen würde. Hoffe das klärt es auf. Vielen Dank! –

Antwort

0

Camera.ScreenToWorldPoint Verwenden ein 'Ziel' in der Mitte des Bildschirms, um die sie zu erstellen zu verschwenken. Entfernen Sie die alle Raycastings Sachen, wie Sie brauchen es nicht und ersetzen die entsprechenden Bits mit:

float rotationSpeed = 45; // or whatever speed 
float distance = 5f; // or whatever radius for the orbit 
Vector3 target = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width/2, Screen.height/2, distance)); 

if (Input.GetKey(KeyCode.RightArrow)) 
{ 
    transform.RotateAround(target , -Vector3.up, rotationSpeed * Time.deltaTime); 
} 
if (Input.GetKey(KeyCode.LeftArrow)) 
{ 
    transform.RotateAround(target , Vector3.up, rotationSpeed * Time.deltaTime); 
} 
+0

Problem mit diesem Code ist, weiß ich nicht meine Entfernung daher der Raycast, auch es beantwortet nicht den ersten und wichtigsten Teil meiner Frage. –

Verwandte Themen