我只是想用鼠標拖動來移動對象。對象是父對象的子對象。這就是代碼中使用 localPosition 的原因。Vector3 startPos;Vector3 dist;void OnMouseDown(){ startPos = Camera.main.WorldToScreenPoint(transform.localPosition); dist = transform.localPosition - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, startPos.z));}void OnMouseDrag(){ Vector3 lastPos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, startPos.z); transform.localPosition = Camera.main.ScreenToWorldPoint(lastPos) + dist;}預期在 x&z 軸上移動對象,但在 x&y 上移動。
1 回答

墨色風雨
TA貢獻1853條經驗 獲得超6個贊
您需要翻轉它,以便使用 Input.mousePosition.y 作為 z 軸,使用 startPos 作為 y 軸。這應該有效:
public class MovementController : MonoBehaviour
{
private const float planeY = 0f;
Plane plane = new Plane(Vector3.up, Vector3.up * planeY); // ground plane
void OnMouseDrag()
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
float distance; // the distance from the ray origin to the ray intersection of the plane
if(plane.Raycast(ray, out distance))
{
transform.position = ray.GetPoint(distance); // distance along the ray
}
}
}
- 1 回答
- 0 關注
- 112 瀏覽
添加回答
舉報
0/150
提交
取消