2017-08-28 6 views
1

Ich schreibe ein 3D-Schachspiel, da es mir hilft, Unity zu lernen. Ich versuche das Ziehen der Kamera zu implementieren, wenn die mittlere Maustaste gedrückt wird. Der folgende Code tut dies, aber das Problem ist, dass sein langsam:Hinzufügen von Kamera ziehen in Unity 3D

bool wasDraggingCamera = false; 
Vector3 lastScreenMousePosition; 
Ray lastMousePosition; 

void Update() 
{ 
    UpdateDrag(); 
} 

void UpdateDrag() 
{ 
    var willDragCamera = wasDraggingCamera; 
    wasDraggingCamera = Input.GetMouseButton(2); 
    var mousePosition = Camera.main.ScreenPointToRay(Input.mousePosition); 
    if (willDragCamera && Input.mousePosition != lastScreenMousePosition) 
     transform.position = transform.position - (mousePosition.origin - lastMousePosition.origin); 
    lastScreenMousePosition = Input.mousePosition; 
    lastMousePosition = mousePosition; 
} 

Sie sehen, das Hauptproblem ist, dass das Delta zwischen zwei Punkten auf der Kamera in dem Weltraum recht klein ist, je nachdem, wie weit Sie sind von dem Gegenstands-Schachbrett, aber das Verstärken es durch das Multiplizieren des Produktes von (mousePosition.origin - lastMousePosition.origin) wird tatsächlich eine exponentielle Geschwindigkeitserhöhung verursachen, zum Beispiel. Ich bin mir nicht ganz sicher, aber kann mir jemand helfen, herauszufinden, wie ich tatsächlich die Geschwindigkeit erhöhen kann, mit der der Widerstand mit dem obigen Code passiert? Ich bin ein bisschen ratlos hier.

+0

wie etwa das Delta von einigen linearen Faktor Ihrer Entfernung vom Brett multipliziert? Je weiter Sie davon entfernt sind, desto größer ist der Delta-Multiplikator. oder besser: Verschieben Sie die Kameraposition nur basierend auf [Bildschirmkoordinaten] (https://docs.unity3d.com/ScriptReference/Camera.WorldToScreenPoint.html) und nicht mit Weltkoordinaten. – ryeMoss

Antwort

0

Habe ich es mit etwas viel einfacher Logik aus:

Vector3 lastDragPosition; 

void Update() 
{ 
    UpdateDrag(); 
} 

void UpdateDrag() 
{ 
    if (Input.GetMouseButtonDown(2)) 
     lastDragPosition = Input.mousePosition; 
    if (Input.GetMouseButton(2)) 
    { 
     var delta = lastDragPosition - Input.mousePosition; 
     transform.Translate(delta * Time.deltaTime * 0.25f); 
     lastDragPosition = Input.mousePosition; 
    } 
}