学习自罗培羽的《Unity3D 网络游戏实战》
public Transform player;
public Transform npc;
private float rotSpeed = 30f;
private void LookAt() {
// 计算出看向指定方向的四元数
Vector3 dir = npc.position - player.position;
Vector3 euler = Quaternion.LookRotation(dir).eulerAngles;
// 旋转速度
float tempRotSpeed = rotSpeed * Time.deltaTime;
// 当前欧拉角与目标欧拉角的偏差,由于获取的欧拉角只会是正数0~360,所有让偏差也处理为0~360度之间以便判断方向
float anglesDiff = euler.y - player.eulerAngles.y;
if (anglesDiff < 0)
anglesDiff += 360;
if (anglesDiff >=180 && tempRotSpeed <= 360-anglesDiff) { // 左转
player.Rotate(0, -tempRotSpeed, 0);
} else if (anglesDiff <180 && tempRotSpeed <= anglesDiff) { // 右转
player.Rotate(0, tempRotSpeed, 0);
}
}