Unity内置的LookAt函数可以让摄像机或者其他物体一直看向于指定的一个位置点,但是这个操作是在一帧的时间内完成的,我说需要实现的效果是在一个指定时间内,看向那个物体,显然LookAt是无法实现的,4个重载中没有指定时间这样的重载,所以就依据LookAt 的实现原理,自行规定时间,旋转过程使用Lerp进行处理。
大致的思路是:
- 先确定目标点和当前位置的向量值
- 根据所求出来的向量值使用四元数的LookRotate()函数求得一个四元数值,这个值就是需要旋转的总量
- 之后使用lerp函数进行旋转,增加时间限制
我这里是使用了eulerAngle进行旋转的,四元数也是一样可以实现的。
示例代码如下(我使用了DoTween做其他操作,看核心块即可):
/// <summary>
/// 到位置之后看向物品
/// </summary>
/// <returns></returns>
protected void LookAtTarget()
{
Vector3 dir;
if (SceneModel.ComputerItem!=null)
{
dir = SceneModel.ComputerItem.position - SceneModel._Camera.transform.position;
Quaternion rot = Quaternion.LookRotation(dir);
SceneModel._Camera.DORotate(new Vector3(rot.eulerAngles.x, rot.eulerAngles.y, rot.eulerAngles.z),1.5f,RotateMode.Fast);
}
}
Over!