C# 使用移动摄影机在unity 2d中拖动对象
我想在C# 使用移动摄影机在unity 2d中拖动对象,c#,unity3d,C#,Unity3d,我想在unity2d中使用以下代码拖动2d对象: offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z)); 问题是我的相机也在沿x轴移动,所以当我点击gameobject拖动它时,它会沿x轴移动。我想让这个gameobejct保持静止,这样它就不会移动了?有
unity2d
中使用以下代码拖动2d对象:
offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new
Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
问题是我的相机也在沿x轴移动,所以当我点击
gameobject
拖动它时,它会沿x轴移动。我想让这个gameobejct
保持静止,这样它就不会移动了?有什么建议吗?您可以尝试使用鼠标指针的速度,而不是使用绝对屏幕中心位置。比如:
if(beingDragged) {
transform.position += new Vector3(Input.GetAxis("Mouse X"),
Input.GetAxis("Mouse Y"), 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;
}
}对不起,我无法实施你的建议。下面是拖动对象的代码,当OnMouseDown()时,它总是获取移动摄影机的位置。下面是上面的代码我要说的是忽略从
输入中获得的坐标。鼠标位置
,不要使用屏幕到世界点
。相反,如果对“鼠标X”和“鼠标Y”使用Input.GetAxis
方法,则可以访问自上一帧以来鼠标移动的距离。如果仅基于这些值进行拖动移动,则拖动移动将完全基于鼠标移动,而不受摄影机的影响。