Kamera Movement in Unity?
Hallo,
ich bin relativ neu in Unity und bin gerade dabei, eine Szene zu erstellen, wobei man die Kamera, wenn man die rechte Maustaste gedrückt hält, verschieben kann.
Die Szene ist isotropisch, weshalb die Kamera auch orthographisch ist.
[SerializeField] private Camera cam;
private Vector3 dragOrigin = Vector3.zero;
public float speed = 10;
void Update(){
if(Input.GetMouseButtonDown(1)){
dragOrigin = cam.ScreenToWorldPoint(Input.mousePosition);
}
if(Input.GetMouseButton(1)){
Vector3 difference = cam.ScreenToWorldPoint(Input.mousePosition) - cam.transform.position;
Vector3 targetPosition = dragOrigin - difference;
cam.transform.position = Vector3.Lerp(cam.transform.position, targetPosition, speed * Time.deltaTime);
}
}
Das funktioniert eigentlich auch, nur gibt es das Problem, dass sich der y-Wert der Kamera auch ändert. Die sollte immer auf dem gleichen y-Wert bleiben.
Wenn ich
targetPosition.y = cam.transform.position.y;
schreibe, bleibt zwar die Kamera auf der gleichen y-Position, aber die Kamera verschiebt sich nach oben und unten langsamer.
Wie kann ich den Code umschreiben, dass sich bei der Kamera nur die x-/ und z-Position ändert und das Verschieben in allen Richtungen gleich schnell geht?
Danke im Voraus.
1 Antwort
Berechne die Differenz in der Mausbewegung im zweidimnsionalen. Sonst hats du auch Probleme abhängig avon, wohin du gerade schaust.
Mit dem zweidimensionalen Vektor der Mausbewegung erhälst du eine Drehrichtung bzw. eine Drehachse, um die du dann die kamera mit konstanter Geschwindigkeit drehst (mittels Geschwindigkeitsparameter, das du vorher festlegst, und der deltaTime des Zeitschrittes).
Die Drehachse erhälst du, wenn ich mich nicht irre, indem du den zweidimensionalen Vektor um eine Dimension erweiterst (sodass er auf der dreidimensionalen Kameraebene liegt) und dann die Senkrechte berechnest, die auf diesem Vektor und der Blickrichtung liegt (dabei darauf achten, dass du die richtige der zwei senkrechten wählst, das sollte sich aber ergeben, wenn du das Kreuzprodukt immer gleich anwendest).
EDIT:
Wobei ich gerade verstehe, dass du das im wesentlichen auch schon machst. Ich sehe auch gerade erst, dass du die Sicht verschieben möchtest und nicht drehen.
Dein einziges Problem ist dann der y-Wert. Du möchtest ja offenbar doch, dass sich der ändert, sonst hättest du ja kein Problem mit der Verschiebung nach oben oder unten?
Wenn du den im kamera-Space konstant halten möchtest, dann musst du einfach den y-Wert der Maus-Position vor Verwendung auf die Mitte setzen.
Wenn du generell nur in die Richtung bewegen möchtest, in die die Bewegung mehr stattfindet, dann suchst du dir das Maximum der einzelnen Dimensionswerte und setzt den jeweils anderen Wert auf die Mitte.
Oder was genau möchtest du machen?