zoukankan      html  css  js  c++  java
  • 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,还是有些差异的,但是一般情况下用起来应该是没什么问题的。而且两个方法效果差异也很大,第二种有一种缓动的感觉,第一种是直接旋转过去。

  • 相关阅读:
    vuejs计算属性和侦听器
    vuejs属性绑定和双向绑定
    vuejs数据和事件
    vuejs挂载点,模板与实例的关系
    vuejs组件的重要选项
    vue开发环境搭建
    vuejs课程简介及框架简介
    SubString
    线性筛约数和函数
    [国家集训队]Tree II
  • 原文地址:https://www.cnblogs.com/vital/p/3337137.html
Copyright © 2011-2022 走看看