返回

Unity 中的坐标系和向量的点乘与叉乘

前端

坐标系

在 Unity 中,有四种主要的坐标系:

  • 世界坐标: 这是场景中的全局坐标系。所有对象都相对于此坐标系进行定位和旋转。
  • 局部坐标: 这是对象的本地坐标系。相对于此坐标系,对象的位置和旋转都是固定的。
  • 视图坐标: 这是摄像机坐标系。相对于此坐标系,对象的定位和旋转都是固定的。
  • 屏幕坐标: 这是屏幕坐标系。相对于此坐标系,对象的定位和旋转都是固定的。

理解这四种坐标系对于理解 Unity 中的对象如何定位和旋转至关重要。

向量的点乘

向量的点乘是两个向量的标量值,它可以用来计算两个向量之间的夹角。向量的点乘公式为:

A · B = |A| * |B| * cos(θ)

其中:

  • AB 是两个向量
  • |A||B| 是两个向量的长度
  • θ 是两个向量之间的夹角

如果两个向量的点乘为 0,则它们是正交的。如果两个向量的点乘为正,则它们的夹角小于 90 度。如果两个向量的点乘为负,则它们的夹角大于 90 度。

向量的叉乘

向量的叉乘是两个向量的向量值,它可以用来计算两个向量之间的垂直向量。向量的叉乘公式为:

A × B = |A| * |B| * sin(θ) * n

其中:

  • AB 是两个向量
  • |A||B| 是两个向量的长度
  • θ 是两个向量之间的夹角
  • n 是两个向量之间垂直的单位向量

示例代码

以下示例代码演示了如何使用向量的点乘和叉乘来计算两个向量的夹角和垂直向量:

using UnityEngine;

public class VectorMathExample : MonoBehaviour
{
    public Vector3 vectorA;
    public Vector3 vectorB;

    void Start()
    {
        // 计算两个向量的点乘
        float dotProduct = Vector3.Dot(vectorA, vectorB);

        // 计算两个向量的夹角
        float angle = Mathf.Acos(dotProduct / (vectorA.magnitude * vectorB.magnitude));

        // 计算两个向量的叉乘
        Vector3 crossProduct = Vector3.Cross(vectorA, vectorB);

        // 打印结果
        Debug.Log("Dot product: " + dotProduct);
        Debug.Log("Angle: " + angle * Mathf.Rad2Deg);
        Debug.Log("Cross product: " + crossProduct);
    }
}

结语

在 Unity 中,理解坐标系和向量的点乘与叉乘对于创建引人入胜的 3D 游戏和应用程序至关重要。通过理解这些概念,您可以更好地控制对象的位置和旋转,并创建更逼真的场景。