首先获取目标角度。Vector3.Angle
只能获取角度差,所以需要用叉乘判断转向然后求得实际角度。
Vector3.Cross
float GetTargetAngle()
{
var angle = Vector3.Angle(Vector3.forward, target.position - transform.position);
if (Vector3.Cross(Vector3.forward, target.position - transform.position).y > 0)
{
}
else if (Vector3.Cross(Vector3.forward, target.position - transform.position).y < 0)
{
angle = -angle;
}
return angle;
}
使用RotateTowards转向目标角度即可。
transform.rotation = Quaternion.RotateTowards(transform.rotation, Quaternion.Euler(transform.rotation.eulerAngles.x, GetTargetAngle(), transform.rotation.eulerAngles.z), angularSpeed * Time.deltaTime);