我正在制作一个在Y轴上拖动对象的脚本。差不多完成了,但我有一个问题。当我单击对象时,对象的中心移动到鼠标位置,然后像这样拖动它,使中心始终位于鼠标位置。举个例子,当我按住精灵的底部时,精灵的中心会停留在原来的位置,并且不会移动到鼠标的位置,我该怎么做?这是我的脚本:
public Vector3 screenPoint;
public Vector3 offset;
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(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint), offset;
transform.position = new Vector3(transform.position.x, curPosition.y, transform.position.z);
}
谢谢。
这是因为curScreenPoint
仍在像素坐标中。你在OnMouseDown
中所做的是正确的。因此,您还应该将OnMouseDrag
中的像素坐标转换为屏幕空间:
更改此行:
Vector3 curScreenPoint = new Vector3(Input.mousePosition.x,
Input.mousePosition.y,
screenPoint.z);
对此:
Vector3 curScreenPoint = Camera.main.ScreenToWorldPoint (new Vector3 (
Input.mousePosition.x,
Input.mousePosition.y,
screenPoint.z)
);
我也不太明白你在这条线上做什么:
Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint), offset;
但它应该是这样的,因为你只想移动Y:
Vector3 curPosition = new Vector3(curScreenPoint.x,
curScreenPoint.y + offset.y,
curScreenPoint.z);