我正在制作一个脚本来在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);
}
谢谢。
答案 0 :(得分:1)
这是因为您的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);