尝试在x轴和y轴上拖放游戏对象。由于某种原因,即使鼠标不移动,x,y和z的值也会随着时间的推移而变小。任何人都可以解释为什么会这样吗?
using UnityEngine;
using System.Collections;
public class Drag : MonoBehaviour {
Vector3 point;
float x;
float y;
float z;
void Update () {
}
void OnMouseDrag()
{
x = Input.mousePosition.x;
y = Input.mousePosition.y;
z = gameObject.transform.position.z;
point = Camera.main.ScreenToWorldPoint (new Vector3 (x, y, z));
gameObject.transform.position = point;
Debug.Log ("x: " + point.x + " y: " + point.y + " z: " + point.z);
}
}
答案 0 :(得分:0)
您的z
应与相机保持距离:z=(Camera.main.transform.position-gameObject.transform.position).magnitude
。即使这样,由于浮动精度问题(取决于规模和运气),您可能会遇到一些漂移。
如果您有漂移问题,请尝试缓存z
值。
此外,如果您使用Camera.main.ScreenPointToRay
并针对Plane
进行了广播,您将获得更多控制权(并且没有浮动漂移问题):
Vector3 ScreenPosToWorldPosByPlane(Vector2 screenPos, Plane plane) {
Ray ray=Camera.main.ScreenPointToRay(new Vector3(screenPos.x, screenPos.y, 1f));
float distance;
if(!plane.Raycast(ray, out distance))
throw new UnityException("did not hit plane", this);
return ray.GetPoint(distance);
}
使用的Plane
应该是这样的:
Plane plane=new Plane(Vector3.up, Vector3.zero);
它位于Vector3.zero
位置,面朝上(Vector3.up
)。