2017-11-03 204 views
0

如果我用鼠标移动我的精灵,精灵始终恰好在光标下。Unity3d将2D Sprite相对于鼠标位置移动

目前我的代码看起来像这样:

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; 
     } 
    } 

,但我想移动精灵,无论在哪里我的鼠标骏马上的背景。所以如果我点击并按住精灵旁边的按钮并将鼠标移动到右侧,我希望我的精灵以相同方向移动。

Example Picture

回答

0

在这种情况下,你应该使用相对运动,也就是鼠标从当前位置移动鼠标点击的按钮时,仿佛那是起源量。

因此,当用户按下鼠标按钮时,应该注意当前的鼠标位置。

这里是一个解决方案,做什么,我形容:

// 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; 
     } 
    } 
} 

你会发现,当按钮被按下最初两当前玩家的位置和当前鼠标位置说明。所以,他们的行为就好像他们是起源一样。只有当按钮被按下时,播放器才会移动鼠标从其初始位置移动的距离。

+0

哇谢谢你,完美的作品。我在这个问题上挣扎了很多小时 – Shivo

+0

很高兴为您提供帮助。我看到你是新来的,所以也许你不知道,但你应该接受答案。谢谢。 – imerso