问题 在Unity 2D中拖动对象


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

我曾尝试将其重写为2D,但我已经使用Vectors崩溃了错误。

如果你能帮助我把它重写为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;
}
}

2025
2018-04-18 10:46


起源



答案:


你快到了。

将代码中的RequireComponent行更改为:

[RequireComponent(typeof(BoxCollider2D))]

并将BoxCollider2D组件添加到您添加脚本的对象。我刚测试它,它工作正常。


8
2018-04-18 20:50





对于使用此代码有问题的人,我删除了 screenPoint 并替换为 10.0f  (这是物体与相机的距离)。你可以使用你需要的任何浮动。现在它有效。对象还需要一个 BoxCollider 要么 CircleCollider 能够被拖走。所以没有必要使用 [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;
    }
}

5
2017-07-16 04:45