引言
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)详解