Unity transform.LookAt()不使用移动目标进行更新

时间:2017-08-14 17:51:12

标签: c# unity3d transform

我的相机将光线投射到屏幕中央,我有一个看向那个方向的物体。问题是,我做了这样的事情,某些键旋转相机,所以有一个新的中心,来自相机的光线也移动但对象没有看到新的方向

这是我的代码:

 void Update (){
 int x = Screen.width / 2;
 int y = Screen.height / 2;

 //Get centre of screen from camera
 Ray ray = Camera.main.ScreenPointToRay (new Vector3 (x, y));
 Debug.DrawRay (ray.origin, ray.direction * 1000, new Color (1f, 0.922f, 0.016f, 1f));

 //Set object direction
 object.transform.LookAt (ray.direction);
 }

我非常感谢你的帮助,谢谢!

2 个答案:

答案 0 :(得分:1)

我找到了解决方案。我没有看光线方向,而是使用GetPoint从光线中得到一个点,并使对象看到它。现在工作正常。

答案 1 :(得分:0)

光线将从相机开始并朝向屏幕中间。因此,如果您希望每次更新时对象都能看到相机,那么方向就会出错,但如果对象不在屏幕中央,该怎么办?如果我误解了您的问题,请进一步评论和解释。我认为更好的方法是使用Camera.main.transform.forward来获得相机的前进方向,你也可以将它放在Physics.Raycast中。要总是看一下相机,你可以尝试object.transform.LookAt(Camera.main.transform.position, -Vector3.Up);

编辑:此外,如果您的意思是让对象看起来与相机的方向相同,您可以随时尝试object.transform.forward = Camera.main.transform.forward,或跟上object.transform.rotation = Quaternion.LookRotation(Camera.main.transform.forward, Transform.up);

好吧新主意:

Ray ray = Camera.main.ViewportPointToRay(new Vector3(0.5F, 0.5F, 0));
RaycastHit hit;
if(Physics.Raycast(ray, out hit))
{
    Vector3 point = hit.point;
    object.transform.LookAt(point, Vector3.Up);
}