Unity3D中计算面朝物体的转向

作为3D游戏开发中,经常需要计算面朝物体的角度转向。比如目前游戏中常用的AI,当你靠近怪物一定的距离时,怪物会感应到你的存在,并转向你,朝你跑过来攻击你。

想要计算这个,首先我们需要知道Unity3D中与四元数相关的几个方法:

Quaternion.LookRotation 主要是将向量,和以某个轴为朝上的方向,来生成一个四元数(用于表示旋转方向)。

Quaternion.Slerp 球形(弧形)插值计算,大部分时候应用于四元数。在从一个旋转值旋转到另外一个旋转值的时候可以使用。

代码如下:

//面向物体
		public void faceToObj ()
		{				
				Vector3 lookPos = pObj.transform.position - transform.position;
				lookPos.y = 0;
				Quaternion rotation = Quaternion.LookRotation (lookPos);
				transform.rotation = Quaternion.Slerp (transform.rotation, rotation, Time.deltaTime * 30.0f);
		}

首先计算两个物体的方向向量,然后将方向向量以某个轴为Up,转换为四元数旋转量。最后通过插值变化,将当前的旋转量旋转到指定的旋转量上,完成平滑的旋转。

lookPos.y = 0主要是为了防止两个物体大小不一样,导致朝向不是平行于地面的。

发表评论

电子邮件地址不会被公开。