上述代码拓展一下X轴和Y轴
时间: 2024-09-21 14:06:39 浏览: 37
当然可以,为了扩展到X轴和Y轴,我们可以在代码中添加类似的部分。这里是一个更新版本的示例:
```csharp
using UnityEngine;
public class WorldCoordinateAngleCalculator : MonoBehaviour
{
public Transform targetA;
public Transform targetB;
void Update()
{
// 获取世界坐标位置
Vector3 positionA = targetA.position;
Vector3 positionB = targetB.position;
// 获取并组合旋转
Quaternion rotationA = targetA.rotation;
Quaternion rotationB = targetB.rotation;
Quaternion combinedRotation = rotationB * rotationA; // 先应用B到A
// 转换为旋转矩阵
Matrix4x4 worldRotationBToA = combinedRotation.ToRotationMatrix();
// 计算新坐标的X、Y、Z轴
Vector3 xAxisAfterRotation = worldRotationBToA * Vector3.right;
Vector3 yAxisAfterRotation = worldRotationBToA * Vector3.up;
// 计算XYZ轴之间的夹角
float xAngle = Mathf.Angle(xAxisAfterRotation, Vector3.right);
float yAngle = Mathf.Angle(yAxisAfterRotation, Vector3.up);
// 只保留Z轴的角度,因为通常我们需要的是朝向的变化
float zAngle = GetZAxisAngle(worldRotationBToA);
Debug.Log("Target A to Target B X-axis angle: " + xAngle + " degrees");
Debug.Log("Target A to Target B Y-axis angle: " + yAngle + " degrees");
Debug.Log("Target A to Target B Z-axis angle: " + zAngle + " degrees");
}
private float GetZAxisAngle(Matrix4x4 matrix)
{
// ... (同上,提取旋转后的Z轴向量并计算夹角)
// 由于已经从Matrix4x4获取了旋转信息,这部分代码可以简化
}
}
```
这个版本的代码不仅计算了Z轴的夹角,还分别计算了X轴和Y轴的夹角。`GetZAxisAngle`函数现在用于从旋转矩阵中提取Z轴的方向。
阅读全文