Unity 中 Vector3 的使用详解

目录

《Unity 中 Vector3 的使用详解》

一、Vector3 的基本概念

(一)定义与组成

(二)初始化方法

二、Vector3 的操作与应用

(一)向量计算


在 Unity 开发中,Vector3 是一个常用且重要的结构体。从本节课开始,我们将深入讲解脚本中常用的类和结构体,首先聚焦于 Vector3。

一、Vector3 的基本概念

(一)定义与组成

Vector3 是一个结构体,其中最常用的三个变量是 x、y、z。它可以描述多种信息,比如从名字来看,它是向量,但同时它也可以代表坐标、旋转、缩放等。例如,当它作为坐标时,可以确定一个位置;当与欧拉角相关时,又可能代表旋转;在涉及缩放比例时,如 x、y 方向不动,z 缩放为 0.5 倍,它就体现了缩放的含义。

(二)初始化方法

  1. 直接new一个 Vector3,也可以通过vector3.zero等静态属性来初始化。vector3.zero能拿到一个初始化为 (0, 0, 0) 的结构体,vector3.one则是初始化为 (1, 1, 1)。还有forward(0, 0, 1)、back(0, 0, -1)、left(-1, 0, 0)、right(1, 0, 0)、up(0, 1, 0)、down(0, -1, 0)等静态属性可快捷获取向量结构体。

二、Vector3 的操作与应用

(一)向量计算

  1. 夹角计算
    • 当有两个向量,如vv2时,可以使用vector3.angle方法计算它们的夹角,该方法传入两个向量,返回的夹角是float类型。例如,当两个向量分别为红色箭头指向的 (1, 0, 0) 和蓝色箭头指向的 (0, 0, 1) 时,计算出的夹角为 90 度。
  2. 距离计算
    • 如果把向量当作两个点(坐标)来使用,就可以通过vector3.distance方法计算两点之间的距离。比如有两个坐标点,通过这个方法可以得到它们之间的距离值。
  3. 点乘与叉乘
    • Vector3 有点乘(dot)和叉乘(cross)操作。点乘结果是一个数值,叉乘结果是一个向量。通过代码vector3.dot vv2进行点乘运算,叉乘则类似有对应的方法进行计算,运行代码可以看到相应的结果。
  4. 差值计算
    • 在两个向量之间可以做差值计算,例如vector3.Lerp(差值计算相关方法),通过给定比例,如在 (0, 0, 0) 向量和 (1, 1, 1) 向量之间,给定比例为 0.5,差值返回结果是 (0.5, 0.5, 0.5);比例为 0.8 时,结果是 (0.8, 0.8, 0.8)。差值计算在游戏动画等方面有很多应用。
  5. 向量的模与规范化
    • 可以获取向量的模,比如拿到v向量的模,代表它当前的长度。通过v.normalize可以得到规范化的向量,使整个向量变成一个单位向量。

以下是用 C# 在 Unity 中使用Vector3的示例代码:

using UnityEngine;

public class Vector3Example : MonoBehaviour
{
    void Start()
    {
        // 初始化方法示例
        Vector3 v1 = new Vector3(2, 3, 4);
        Vector3 v2 = Vector3.zero;
        Vector3 v3 = Vector3.one;
        Vector3 v4 = Vector3.forward;
        Vector3 v5 = Vector3.back;
        Vector3 v6 = Vector3.left;
        Vector3 v7 = Vector3.right;
        Vector3 v8 = Vector3.up;
        Vector3 v9 = Vector3.down;

        // 向量计算示例
        Vector3 vv1 = new Vector3(1, 0, 0);
        Vector3 vv2 = new Vector3(0, 0, 1);

        // 夹角计算
        float angle = Vector3.Angle(vv1, vv2);
        Debug.Log("夹角为:" + angle);

        // 距离计算
        Vector3 point1 = new Vector3(2, 2, 2);
        Vector3 point2 = new Vector3(5, 5, 5);
        float distance = Vector3.Distance(point1, point2);
        Debug.Log("两点距离为:" + distance);

        // 点乘示例
        float dotResult = Vector3.Dot(vv1, vv2);
        Debug.Log("点乘结果为:" + dotResult);

        // 叉乘示例
        Vector3 crossResult = Vector3.Cross(vv1, vv2);
        Debug.Log("叉乘结果为:" + crossResult);

        // 差值计算示例
        Vector3 start = Vector3.zero;
        Vector3 end = Vector3.one;
        Vector3 lerpResult1 = Vector3.Lerp(start, end, 0.5f);
        Vector3 lerpResult2 = Vector3.Lerp(start, end, 0.8f);
        Debug.Log("比例为 0.5 的差值结果为:" + lerpResult1);
        Debug.Log("比例为 0.8 的差值结果为:" + lerpResult2);

        // 向量的模与规范化示例
        Vector3 vv3 = new Vector3(3, 4, 5);
        float magnitude = vv3.magnitude;
        Debug.Log("向量的模为:" + magnitude);
        Vector3 normalized = vv3.normalized;
        Debug.Log("规范化后的向量为:" + normalized);
    }
}

这段代码展示了在 Unity 中Vector3的各种常见操作和应用,包括初始化、夹角计算、距离计算、点乘、叉乘、差值计算以及向量的模和规范化。你可以将这个脚本挂载到一个游戏对象上,在 Unity 编辑器中运行游戏,查看控制台输出的结果。

在 Unity 开发中,熟练掌握 Vector3 的使用是非常重要的基础,随着后续开发的深入,我们会更加理解它的多种用途和灵活操作。更多关于 Vector3 的高级应用,我们将在后续编写更复杂的代码时进一步探索和理解。