首次提交
This commit is contained in:
49
Assets/Scripts/Common/Utils/GameUtils.cs
Normal file
49
Assets/Scripts/Common/Utils/GameUtils.cs
Normal file
@@ -0,0 +1,49 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user