unity3D相机缓慢看向目标物体

有的时候我们希望相机可以慢慢的转动去看向一个目标物体,官方的API里有个方法是LookAt,但是LookAt是直接看过去,少了一个旋转的过程。

    void CameraRotateToLookAt(Transform target,float rotateSpeed)
    {
        //取得目标物体相对于相机的法向量
        Vector3 normalize = Vector3.Cross(myCamera.transform.forward,target.transform.position-myCamera.transform.position);
        float angles = Vector3.Angle(myCamera.transform.position,target.transform.position);
        
        //以该法向量为轴进行旋转
        myCamera.transform.Rotate(normalize,Time.deltaTime*rotateSpeed,Space.Self);
        Debug.Log(angles);
        if(angles == 0)
        {
            rotateSpeed = 0;
        }
    }

 其实这个可以引申到很多方面,比如说怪物的AI,怪物转向Player,又或者其它的一些物体或者游戏的角色控制等。只需要替换一下myCamera即可,另外这个原理就是取得两个物体之间的相对法向量,然后相对该法向量进行旋转。不过还有一些其它办法可以实现,例如:

            Quaternion rotation = Quaternion.LookRotation(target.position - transform.position);
            transform.rotation = Quaternion.Slerp(transform.rotation,rotation,damping*Time.deltaTime);

不过这个方法并不是很准确的LookAt,还是有些差异的,但是一般情况下用起来应该是没什么问题的。而且两个方法效果差异也很大,第二种有一种缓动的感觉,第一种是直接旋转过去。

posted @ 2013-09-24 16:02  Vital  阅读(7869)  评论(1编辑  收藏  举报