Unity3D

Unity3D 缓慢注视旋转(Quaternion.LookRotation+Slerp)详解

页面
字体
小树 · 11月12日 · 2019年 ·

引言

Unity3D游戏开发需要学的东西有很多,下面要给大家介绍的是注视旋转(Quaternion.LookRotation)的实现方法,一起来看看吧。

效果图

详解

编写怪物位置看到目标点,正确写法是Quaternion.lookRotation(Target.positon-Enemy.position)

(Unity3D的坐标,相对这张图片X是横轴,Z是竖轴,下面暂时忽略Y轴)  

从世界坐标系[0.0]分别连接点Target,Enemy坐标点得到两个向量(0→Target,0→Enemy),

绿色向量(Enemy→Target)代表怪物看到目标点。  

由向量加减可得,(0→Target)-(0-Enemy)=(Enemy-Target)。

故Quaternion.LookRotation(Target.position-Enemy.position)。

代码

一般情况下,除非机械,否则都是需要缓慢lookat,而不是在sphere移动的时候瞬间lookat(头转太快脖子容易闪到,也不太合理),这时候可以使用slerp函数,写法如下:

void Update(){
    Vector3 directionToFace = sphere.position - transform.position;//sphere 就是要注视的obj
    DeBug.drawRay(transform.position,sphere.position,Color.green);//在scene中画出debug线
    transform.rotation = Quaternion.LookRotation(directionToFace);//LookAt

    //如果想要缓慢lookat,而不是在sphere移动的时候瞬间lookat(头转太快脖子容易闪到,也不太合理),可以使用slerp函数,写法如下:(需要把第三句代码注释掉)
    Quaternion targetRotation = Quaternion.LookRotation(directionToFace);//先获取LookAt角度
    transform.rotation = Quaternion.Slerp(transform.rotation,targetRotation,Time.deltaTime );//在1秒内注视LookAt完毕
}

转载必须注明来源: 小树技术博客 » Unity3D 缓慢注视旋转(Quaternion.LookRotation+Slerp)详解

0 条回应