2014-04-18 110 views
10

我已经找到了用于Unity 2D的对象拖动脚本。我在互联网上找到了一个很好的方法,但它似乎只是在Unity 3D中工作。这对我来说并不好,因为我正在制作一款2D游戏,并且不会以这种方式与“墙壁”相撞。在Unity 2D中拖动对象

我试图将其重写为2D,但我已经崩溃到与向量的错误。

如果你能帮我把它改写成2D,我会很高兴。

这里是什么工作在3D代码:

using UnityEngine; 
using System.Collections; 

[RequireComponent(typeof(BoxCollider))] 

public class Drag : MonoBehaviour { 
    private Vector3 screenPoint; 
    private Vector3 offset; 

void OnMouseDown() { 

    offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z)); 
} 

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

回答

8

你几乎没有。

变化在代码中RequireComponent行:

[RequireComponent(typeof(BoxCollider2D))] 

,并添加BoxCollider2D组件向其中添加脚本的对象。我只是测试它,它工作正常。

2

对于使用此代码谁拥有问题的那些,我删除screenPoint并用10.0f(其是物体的从摄像机的距离)取而代之。你可以使用你需要的任何浮点数。现在它可以工作。此外,该对象需要BoxColliderCircleCollider才能够被拖动。所以使用[RequireComponent(typeof(BoxCollider2D))]没有意义。

这对我来说工作得很好最后的代码是:

using UnityEngine; 
using System.Collections; 


public class DragDrop : MonoBehaviour { 

    private Vector3 offset; 

    void OnMouseDown() 
    { 

     offset = gameObject.transform.position - 
      Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 10.0f)); 
    } 

    void OnMouseDrag() 
    { 
     Vector3 newPosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 10.0f); 
     transform.position = Camera.main.ScreenToWorldPoint(newPosition) + offset; 
    } 
}