Unity从相对角度较小的一侧转向目标方向

首先获取目标角度。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);

猜你喜欢

转载自blog.csdn.net/qq_39162826/article/details/121639214