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,還是有些差異的,但是一般情況下用起來應該是沒什么問題的。而且兩個方法效果差異也很大,第二種有一種緩動的感覺,第一種是直接旋轉過去。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM