2017-02-08 4 views
1

Ich versuche einen schleppenden Effekt zu erzielen. Ich habe ein Projekt, bei dem du einen Knochen aus Fleisch ziehen sollst. Das Ziehen funktioniert, aber wenn ich den Knochen packe, kann ich ihn in alle Richtungen bewegen. Was ich erreichen möchte ist, dass ich es nur in eine Richtung ziehen kann. Auf den Bildern unten meine ich die rote Linie. Ich habe viele Dinge ausprobiert, aber bisher hat noch nichts funktioniert. Jede Hilfe wird geschätzt.Ziehen eines Objekts in einer Zeile

enter image description here enter image description here

benutzte ich diese Funktionen für die schlepp.

void OnMouseDown() 
{ 
    offset = this.transform.position - Camera.main.ScreenToWorldPoint(new Vector2(Input.mousePosition.x, Input.mousePosition.y)); 
} 

void OnMouseDrag() 
{ 
    Vector3 curScreenPoint = new Vector2(Input.mousePosition.x, Input.mousePosition.y); 
    Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset; 
    transform.position = curPosition; 
} 
+0

Ist es sicher anzunehmen, dass dies nur soll in Richtung des roten Pfeils bewegen? Wenn ja, kennen Sie die Grade, in denen der rote Pfeil mit dem Objekt in Beziehung steht? Ändert der rote Pfeil jemals die Winkel? Wenn nicht, können wir annehmen, dass es immer in einem Winkel von 45 Grad ist? –

+0

Ja, nur in Richtung des roten Pfeils. Nun, jedes der Objekte hat eine andere Rotation, so dass es nicht immer 45 ist. – Richarrd82

+0

Ahh, Pfeile, die die Winkel ändern können, machen das etwas komplizierter. Jetzt gehen wir in die Gleichung y = mx + b, um zu bestimmen, wie viele X- und Y-Einheiten jeder Mausdrang benötigt, um die Einheiten zu bewegen. Ich würde damit beginnen, das Bild zuerst in den 45-Grad-Winkeln zu bewegen und dann darauf zu bauen, um verschiedene Winkel zu berücksichtigen. –

Antwort

1

Nehmen Sie einfach die x Komponente Ihrer Maus und verwenden localPosition:

void OnMouseDown() 
{ 
    offset = this.transform.localPosition - Camera.main.ScreenToWorldPoint(new Vector2(transform.localPosition.x, Input.mousePosition.y)); 
} 

void OnMouseDrag() 
{ 
    Vector3 curScreenPoint = new Vector2(transform.localPosition.x, Input.mousePosition.y); 
    Vector3 mousePos = Camera.main.ScreenToWorldPoint(curScreenPoint); 
    Vector3 curPosition = new Vector3(mousePos.x, 0f, 0f) + offset; 
    transform.localPosition = curPosition; 
} 
+0

Es lässt mich nicht mit einem Vector3 multiplizieren, es besagt, dass Operator * nicht auf Operanden vom Typ Vector3 angewendet werden kann – Richarrd82

+0

@ Richarrd82 Habe nicht gesehen, dass der Offset auch ein Vector3 ist :) ich habe meine bearbeitet Antwort –

+0

Ich vermasselt und ich habe etwas im Code. Statt der transform.position.x soll es Input.mousePosition.x geben – Richarrd82

Verwandte Themen