using UnityEngine; namespace NBF { public static class GameUtils { public static float GetVerticalAngle(Transform character, Transform target) { // 计算从角色指向目标的向量 Vector3 direction = target.position - character.position; // 计算水平距离(XZ平面) float horizontalDistance = new Vector3(direction.x, 0, direction.z).magnitude; // 计算垂直高度差(Y轴) float verticalDistance = direction.y; // 使用反正切计算垂直角度 // Atan2(垂直距离, 水平距离) float angle = Mathf.Atan2(verticalDistance, horizontalDistance) * Mathf.Rad2Deg; return angle; // 正值为上方,负值为下方 } public static float GetHorizontalAngle(Transform obj1, Transform obj2) { // 获取两个物体在水平面上的位置向量 Vector3 pos1 = obj1.position; Vector3 pos2 = obj2.position; // 创建水平方向向量(忽略Y轴) Vector3 direction = new Vector3( pos2.x - pos1.x, 0, // Y轴设为0,只在XZ平面计算 pos2.z - pos1.z ); // 计算相对于世界坐标系前向向量的角度 float angle = Vector3.SignedAngle( Vector3.forward, // 参考方向(世界坐标系前向) direction.normalized, Vector3.up // 旋转轴(Y轴) ); // 返回角度范围:-180° 到 180° return angle; } } }