2017-11-03 4 views
0

Wenn ich mein Sprite mit der Maus verschiebe, befindet sich das Sprite immer genau unter dem Cursor.Unity3d Move 2D Sprite relativ zur Mausposition

Im Moment mein Code sieht wie folgt aus:

public GameObject player; 
    private float distance = 1; 

    private void Update() 
    { 
     if (Input.GetMouseButton(0)) 
     { 
      Vector3 mousePos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, distance); 
      Vector3 playerPos = Camera.main.ScreenToWorldPoint(mousePos); 
      player.transform.position = playerPos; 
     } 
    } 

, aber ich möchte das Sprite bewegen, egal wo meine Maus courser auf dem Hintergrund ist. Wenn ich also neben dem Sprite klicke und halte und meine Maus nach rechts bewege, möchte ich, dass sich mein Sprite auf die gleiche Weise in die gleiche Richtung bewegt.

Example Picture

Antwort

0

In diesem Fall sollten Sie eine Relativbewegung, verwenden Sie das heißt, die Menge, die die Maus von seiner aktuellen Position bewegt, wenn die Maustaste geklickt wurde, als ob das der Ursprung war.

Sie sollten also die aktuelle Mausposition beachten, wenn der Benutzer die Maustaste gedrückt hat.

Hier ist eine Lösung, die das tut, was ich beschreiben:

// by Vander 'imerso' Nunes to StackOverflow answer 

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class MouseDrag : MonoBehaviour 
{ 
    public GameObject player; 

    bool dragging = false; 
    Vector3 mouseStartPos; 
    Vector3 playerStartPos; 

    private void Update() 
    { 
     if (Input.GetMouseButtonDown(0)) 
     { 
      dragging = true; 
      mouseStartPos = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0)); 
      playerStartPos = player.transform.position; 
     } 
     else if (Input.GetMouseButtonUp(0)) 
     { 
      dragging = false; 
     } 

     if (dragging) 
     { 
      Vector3 mousePos = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0)); 
      Vector3 move = mousePos - mouseStartPos; 
      player.transform.position = playerStartPos + move; 
     } 
    } 
} 

Sie werden feststellen, dass sowohl aktuelle Position des Spielers und aktuelle Mausposition festgestellt werden, wenn die Taste anfänglich gedrückt wird. Sie verhalten sich so, als ob sie der Ursprung wären. Der Spieler wird nur um die Distanz bewegt, um die sich die Maus beim Drücken der Taste aus ihrer ursprünglichen Position bewegt.

+0

Wow danke, funktioniert perfekt. Ich kämpfte so viele Stunden mit diesem Problem – Shivo

+0

Froh, zu helfen. Ich sehe, du bist neu hier, also weißt du es vielleicht nicht, aber du solltest die Antwort dann akzeptieren. Vielen Dank. – imerso