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

  • 相关阅读:
    ActiveMQ 中的链表
    ActiveMQ 的线程池
    ActiveMQ broker解析
    ActiveMQ broker和客户端之间的确认
    ActiveMQ producer 流量控制
    基于大数据的精准营销与应用场景
    Math.abs为Integer.Min_VALUE返回错误的值
    使用http_load网站压力测试
    可伸缩系统的架构经验
    Tumblr:150亿月浏览量背后的架构挑战
  • 原文地址:https://www.cnblogs.com/vital/p/3337137.html
Copyright © 2011-2022 走看看