ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Unity 向量应用指南:从坐标、方向到运动

Unity 向量应用指南:从坐标、方向到运动 一、Unity 里的向量位置与运动的基本单位在 Unity 中向量Vector是描述空间信息的最小单位。它的本质只有两个要素方向与长度模长。一个向量既告诉你朝哪走也告诉你走多远。Unity 里几乎所有空间相关的操作最终都归结为对向量的读写。它的用途可以归为两类位置向量描述空间中的一个坐标点例如transform.position它回答物体在哪里。方向向量描述一条射线的朝向不关心起点例如transform.forward它回答物体朝哪边。这两类用途看似不同实则同源——它们都用同一套Vector3结构存储并且可以互相运算。坐标点加上一个方向向量就得到一个新的坐标点这正是位移的数学本质。也正因如此Transform 的位置、物体的移动、角色的朝向全部建立在向量之上。理解了向量就理解了 Unity 空间系统的底层语言。二、Vector2 与 Vector3Unity 中的两类向量Unity 提供了两种向量结构选型取决于你的项目维度。Vector3(x, y, z)是 3D 场景的主角对接 Transform 的位置、方向与旋转。Vector2(x, y)则服务于 UI、2D 游戏与鼠标屏幕坐标。// 三维向量用于 3D 场景、Transform 位置/方向/旋转 Vector3 v3 new Vector3(1, 2, 3); // 二维向量用于 UI、2D 游戏、鼠标屏幕坐标 Vector2 v2 new Vector2(1, 2);选型判断原则很简单只要涉及深度Z 轴或 3D 空间就用Vector3只在平面内活动用Vector2更轻量、语义更清晰。以 3D 文物展示项目为例文物的摆放位置、相机环绕的朝向、旋转轴全部依赖Vector3而 UI 面板上的拖拽、缩放锚点则用Vector2处理。同一项目里两者并存是常态关键是让每个向量只承担它该承担的维度。三、用内置常量快速表达方向Unity 为最常用的方向预定义了内置常量无需手写坐标数值直接用语义化名称表达方向既简洁又不易出错。3.1 zero 与 oneVector3.zero零向量(0, 0, 0)常用于初始化位置、重置位移、作为累加起点。Vector3.one单位向量(1, 1, 1)常用于统一缩放、等比放大。3.2 六个轴向常量Unity 的坐标系中X 轴向右为正、Y 轴向上为正、Z 轴向前为正。六个轴向常量正是这一规则的语义化封装。常量名对应数值世界坐标含义Vector3.up(0, 1, 0)世界 Y 轴向上Vector3.down(0, -1, 0)世界 Y 轴向下Vector3.right(1, 0, 0)世界 X 轴向右Vector3.left(-1, 0, 0)世界 X 轴向左Vector3.forward(0, 0, 1)世界 Z 轴向前Vector3.back(0, 0, -1)世界 Z 轴向后// 直接用常量表达方向语义清晰 Vector3 up Vector3.up; // (0, 1, 0) Vector3 forward Vector3.forward; // (0, 0, 1) // 应用让物体沿世界坐标向上移动 transform.Translate(Vector3.up * speed * Time.deltaTime, Space.World);核心价值常量既是方向也是参考基准。当你需要表达向上向前这类绝对方向时用常量比手写new Vector3(0, 1, 0)更直观也避免了数值写错的风险。记住常量表达的是世界坐标方向与物体自身朝向无关——若需物体自身的前方应使用transform.forward。四、向量的运算与位移逻辑4.1 加法位移的叠加向量加法是最基础的运算它把两个方向与长度合并成一个新的向量。Vector3 a new Vector3(1, 0, 0); // 沿 X 轴 1 米 Vector3 b new Vector3(0, 0, 1); // 沿 Z 轴 1 米 Vector3 c a b; // (1, 0, 1)斜向位移几何意义a b表示先走 a再走 b最终到达的位移就是c。从坐标值看就是各分量分别相加。4.2 坐标与向量的关系坐标点与向量都用Vector3表示且可以互相运算。坐标 向量 新坐标这是位移的核心公式。Vector3 p1 transform.position; // 物体 A 的坐标 Vector3 p2 gameObjectB.transform.position; // 物体 B 的坐标 Vector3 diff p2 - p1; // 从 A 指向 B 的向量 Vector3 p3 p2 diff; // 比 B 更远离 A 一倍的位置4.3 四个典型位移问题掌握了坐标 向量以下问题迎刃而解头顶 1 米加粒子transform.position Vector3.up * 1f前方 1 米生成炮塔transform.position transform.forward * 1f射击提前量瞄准玩家前方 0.5 米player.position player.forward * 0.5fAI 边移动边躲避用向量加减组合出朝向玩家与远离危险区的合成方向4.4 延伸方向归一化normalized保留方向、丢弃长度得到单位向量用于只关心朝哪走的场景。模长magnitude返回向量的长度float用于计算距离、控制速度。插值Lerp/MoveTowards在两点之间平滑过渡前者按比例、后者按固定速度。// 归一化得到从 A 指向 B 的方向 Vector3 dir (vectorB - vectorA).normalized; // 沿该方向移动 0.5 米 vectorA dir * 0.5f;一句话记忆magnitude管多远normalized管朝哪两者互补是移动逻辑的两把钥匙。五、典型应用场景串讲场景一物体移动与位移计算三种主流写法按需求选择// 1. Translate按方向增量移动可指定坐标系 transform.Translate(Vector3.forward * speed * Time.deltaTime, Space.World); // 2. position直接改写坐标简单直接 transform.position transform.forward * speed * Time.deltaTime; // 3. MoveTowards以固定速度逼近目标不会超过终点 transform.position Vector3.MoveTowards(transform.position, targetPos, speed * Time.deltaTime);要点Translate与position是增量式MoveTowards是逼近式后者天然适合追踪与到达判定。场景二朝向与方向判断用点乘与叉乘判断目标相对位置Vector3 toTarget (target.position - transform.position).normalized; // 点乘判断前后0 在前方0 在后方 float dot Vector3.Dot(transform.forward, toTarget); // 叉乘判断左右y0 在右侧y0 在左侧 Vector3 cross Vector3.Cross(transform.forward, toTarget); bool onRight cross.y 0f;扇形视野检测同时满足距离在范围内与夹角在范围内两个条件用dot Mathf.Cos(viewAngle * Mathf.Deg2Rad)作为角度阈值即可。场景三2D / UI 与鼠标坐标处理UI 拖拽、2D 角色移动、鼠标屏幕坐标统一用Vector2处理。鼠标位置经Camera.main.ScreenToWorldPoint转换后即可与场景中的Vector2坐标做运算。场景四3D 场景中的位置与旋转控制3D 场景中位置用Vector3描述旋转用Quaternion或欧拉角。朝向某目标时先算出方向向量再转为旋转Vector3 dir (target.position - transform.position).normalized; transform.rotation Quaternion.LookRotation(dir);四个场景的共同点先确定方向向量再决定如何应用——移动、判断还是旋转。结尾要点速查与汇报小结要点速查清单向量 方向 长度是 Unity 描述空间信息的基本单位。两类用途位置向量坐标点与方向向量射线朝向。Vector3用于 3D 场景Vector2用于 UI / 2D / 鼠标坐标。坐标 向量 新坐标这是位移的核心公式。magnitude管多远normalized管朝哪。Dot判前后Cross判左右。常量速记表常量数值含义up/down(0, ±1, 0)世界 Y 轴上下right/left(±1, 0, 0)世界 X 轴左右forward/back(0, 0, ±1)世界 Z 轴前后zero/one(0,0,0) / (1,1,1)零向量 / 单位向量应用对照表场景对应写法增量移动transform.Translate(dir * speed * Time.deltaTime)直接改坐标transform.position dir * speed * Time.deltaTime固定速度逼近Vector3.MoveTowards(pos, target, speed * Time.deltaTime)平滑过渡Vector3.Lerp(start, end, t)判断前后Vector3.Dot(forward, toTarget)判断左右Vector3.Cross(forward, toTarget).y朝向目标Quaternion.LookRotation(dir)汇报结论Unity 中所有空间信息——位置、方向、移动、旋转——都统一建立在向量之上掌握向量即掌握了空间系统的底层语言。位移的本质是坐标 向量而方向判断的本质是点乘与叉乘二者构成了移动与 AI 逻辑的两大支柱。内置常量与归一化、插值等工具让向量的表达既语义清晰又高效可靠是日常开发中最值得优先掌握的基础能力。
返回列表