我已经为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;
}
}
答案 0 :(得分:8)
你几乎就在那里。
将代码中的RequireComponent行更改为:
[RequireComponent(typeof(BoxCollider2D))]
将BoxCollider2D组件添加到您添加脚本的对象。我只是测试了它,它工作正常。
答案 1 :(得分:6)
对于使用此代码时遇到问题的人,我删除了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;
}
}