我想使用以下代码在unity2d
中拖动我的第2个对象:
offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new
Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
问题是我的相机也沿x轴移动,所以当我点击gameobject
拖动它时,它会沿着x轴移动。我希望将此gameobejct
设为静态,以便它取代它并且不会移动?有什么建议吗?
答案 0 :(得分:0)
您可以尝试使用鼠标指针的速度,而不是使用绝对以屏幕为中心的位置。类似的东西:
if(beingDragged) {
transform.position += new Vector3(Input.GetAxis("Mouse X"),
Input.GetAxis("Mouse Y"), 0);
}
另一种选择是使用变量来跟踪自拖动开始以来的摄像机移动。然后你可以从你的计算中减去这个移动偏移量,这样拖动就可以在" World Space"而不是"屏幕空间"
答案 1 :(得分:0)
抱歉,我无法实施你的建议。下面是拖动对象的代码,当OnMouseDown()它总是获取移动相机的位置时。
void OnMouseDown()
{
screenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position);
offset = gameObject.transform.position + Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
}
void OnMouseDrag()
{
Vector3 curScreenPoint = new Vector3(screenPoint.x, Input.mousePosition.y, screenPoint.z);
Vector3 curPosition = Camera.main.ScreenToWorldPoint (curScreenPoint);
transform.position = curPosition;
}
}