在 Unity 游戏开发过程中,掌握一些常用的属性方法是非常重要的,这有助于高效地进行游戏逻辑编写和场景控制。下面为大家详细介绍几个常用的类及其属性方法。

一、Vector3 结构体
Vector3 结构体由 x、y、z 这 3 个数值组成,可用于表示向量、位置、旋转和缩放等信息。使用时需先明确其代表的具体含义。
创建 Vector3 结构体的方式为:Vector3 v = new Vector3(1, 1, 1); 。其部分常用属性方法如下:
| 属性方法 | 详解 | 补充知识点 |
|---|---|---|
| magnitude | 向量的长度(只读) | 在计算物体间距离、速度大小等场景常用。例如计算角色与目标点的距离,可通过两点构成的向量的 magnitude 获取 |
| normalized | 归一化后的向量(只读) | 归一化向量长度为 1,常用于只关注方向,不关注大小的情况,如物体的朝向。在 AI 寻路中,可将目标方向向量归一化后作为移动方向 |
| sqrMagnitude | 向量长度的平方(只读) | 相比 magnitude,计算 sqrMagnitude 无需开方,性能更高。在仅需比较向量长度大小关系时,优先使用该属性,比如判断敌人与角色的远近顺序 |
| +、-、*、/ | 向量的加、减、乘、除运算 | 向量加法可用于物体位置的偏移,如角色的移动;向量乘法可以实现缩放效果,如物体的放大缩小。在实现物体的复合运动时,会频繁用到这些运算 |
| Angle(Vector3 from, Vector3 to) | 计算两个向量之间的夹角(以度为单位) | 常用于判断物体朝向与目标方向的偏差,比如角色看向敌人的角度是否在攻击范围内 |
| Cross(Vector3 a, Vector3 b) | 返回两个向量的叉积 | 在处理三维空间中的旋转方向、碰撞法线等问题时会用到,例如确定碰撞后物体的旋转方向 |

二、Quaternion 结构体
Quaternion 结构体代表一个四元数,包含一个标量和一个三维向量,用于描述物体的旋转。四元数是四维空间的高阶复数,相比欧拉角,它效率更高且不会造成万向节锁现象,所以游戏物体的旋转在 Unity 脚本中默认用四元数表示。部分常用属性方法如下:
| identity | 表示单位旋转,相当于无旋转 | 在初始化物体旋转或重置旋转状态时使用,如角色死亡后重新复活,可将其旋转设置为 identity |
| eulerAngles | 将四元数转换为欧拉角 | 方便以直观的角度形式查看和编辑旋转。但要注意欧拉角存在万向节锁问题,在连续旋转计算时可能出现意外结果 |
| FromToRotation(Vector3 fromDirection, Vector3 toDirection) | 创建从 fromDirection 到 toDirection 的旋转 | 常用于物体转向目标方向的场景,如炮塔转向敌人所在方向 |
| LookRotation(Vector3 viewDirection, Vector3 up = Vector3.up) | 创建一个指向目标方向的旋转 | 第一个参数为目标方向向量,第二个参数为指定的 “上” 方向,常用于设置相机或角色看向目标的旋转,如相机跟随角色时的朝向设置 |
| Slerp(Quaternion from, Quaternion to, float t) | 在两个四元数之间进行球形插值 | 可实现物体旋转的平滑过渡效果,比如角色头部平滑转向目标,让动画更加自然 |

三、Debug 类
编程时调试不可或缺,Unity 中用于调试的方法均在 Debug 类中。部分常用方法如下:
| 方法 | 详解 | 补充知识点 |
|---|---|---|
| Log(object message) | 在 “控制台” 面板中输出一条信息 | 可输出各种类型的数据,如变量值、字符串等,方便在开发过程中查看程序运行时的状态。可以添加标签来分类信息,便于查找 |
| LogWarning(object message) | 在 “控制台” 面板中输出一条警告信息 | 用于标记可能存在问题,但不会导致程序崩溃的情况,提醒开发者注意潜在风险,如资源即将耗尽等 |
| LogError(object message) | 在 “控制台” 面板中输出一条错误消息 | 当程序出现运行时错误,如空引用、越界访问等,使用该方法输出错误信息,帮助定位和解决问题 |
| DrawLine(Vector3 start, Vector3 end, Color color = Color.white, float duration = 0.0f, bool depthTest = true) | 在指定的起始和终点之间绘制一条直线 | 常用于可视化调试,如绘制射线检测的路径、物体的运动轨迹等。duration 参数可设置直线显示的时间,方便观察动态过程 |
| DrawRay(Vector3 origin, Vector3 direction, Color color = Color.white, float duration = 0.0f, bool depthTest = true) | 绘制一条从原点出发,沿指定方向的射线 | 在射线检测相关的调试中非常有用,如检测碰撞、寻找目标等功能的调试 |
四、GameObject 类
在游戏场景中,每一个游戏物体都对应了一个 GameObject 类的对象。例如一棵树、一个敌人等。部分常用属性方法如下:
| 属性方法 | 详解 | 补充知识点 |
|---|---|---|
| activeInHierarchy | 表示游戏对象在场景中真正的激活状态 | 受父物体激活状态影响,如果父物体未激活,即使自身设置为激活,activeInHierarchy 也为 false。常用于控制物体的显示和功能启用 |
| activeSelf | 代表游戏物体当前设置的激活状态 | 是物体自身的激活设置,不受父物体影响。可以通过该属性单独控制物体的激活与否 |
| tag | 游戏物体的标签 | 用于快速识别和查找特定类型的物体,如 “Player”“Enemy” 等。在碰撞检测、事件触发等逻辑中,常通过标签判断对象类型 |
| name | 游戏物体的名称 | 方便在场景视图和脚本中识别物体,在大规模场景中,合理命名有助于提高开发效率 |
| AddComponent<T>() where T : Component | 向游戏对象添加指定类型的组件 | 可以为物体动态添加各种功能,如添加 Rigidbody 组件使其具有物理属性,添加脚本组件实现自定义逻辑 |
| GetComponent<T>() where T : Component | 获取游戏对象上指定类型的组件 | 在脚本中访问和操作物体的组件,如获取 MeshRenderer 组件来修改物体的材质和纹理 |
| GetComponents<T>() where T : Component | 获取游戏对象上所有指定类型的组件 | 当一个物体上有多个相同类型组件时使用,比如多个碰撞器组件 |
| FindGameObjectsWithTag(string tag) | 根据标签查找所有对应的游戏对象 | 常用于批量处理具有相同标签的物体,如同时控制所有敌人的行为 |

五、Time 类
游戏流程常受时间影响,Time 类包含了游戏中的时间信息,可用于对游戏进行暂停、加速或减速等操作。部分常用属性方法如下:
| 属性方法 | 详解 | 补充知识点 |
|---|---|---|
| deltaTime | 一帧到下一帧所耗费的时间 | 用于实现帧率无关的运动,确保物体在不同帧率下移动速度一致。在 Update 方法中计算物体位移时常用,如transform.Translate(speed * Time.deltaTime); |
| timeScale | 时间缩放值,默认值为 1.0 | 可以实现游戏的暂停(设置为 0)、加速或减速效果。但要注意,一些不受 timeScale 影响的时间相关操作(如物理模拟的固定时间步长)需单独处理 |
| fixedTime | 固定的时间间隔,用于物理模拟的时间步长 | 确保物理计算的稳定性和一致性,在 FixedUpdate 方法中使用,该方法会按照 fixedTime 的间隔固定调用 |
| unscaledDeltaTime | 不受 timeScale 影响的时间间隔 | 在需要不受游戏暂停或加速影响的逻辑中使用,比如 UI 动画的时间计算,确保 UI 元素的动画播放不受游戏时间缩放的干扰 |
六、Mathf 类
在游戏开发中,数学运算是必不可少的。Mathf 结构体为 Unity 提供了数学运算集合,包含了很多常用的数学运算。部分常用属性方法如下:
| 属性方法 | 详解 | 补充知识点 |
|---|---|---|
| PI | 圆周率常量,值为 3.14159265358979323846 | 在涉及圆形、弧度计算等场景中使用,如计算圆的周长、角度与弧度的转换 |
| Abs(float f) | 返回绝对值 | 用于处理只关注数值大小,不关注正负的情况,如计算距离差的大小 |
| Sin(float f)、Cos(float f)、Tan(float f) | 正弦、余弦、正切函数 | 在处理角度相关的计算,如物体的旋转、移动方向等问题时常用,需注意参数为弧度制 |
| Ceiling(float f) | 向上取整 | 例如将小数形式的分数向上取整为整数,在计算所需资源数量等场景中可能用到 |
| Floor(float f) | 向下取整 | 与 Ceiling 相反,常用于舍去小数部分,如计算可购买物品的最大数量 |
| Clamp(float value, float min, float max) | 将给定的值限制在指定的最小值和最大值之间 | 在控制角色生命值、能量值等不超出范围时非常实用,也可用于限制物体的移动范围 |
| Lerp(float a, float b, float t) | 在两个值之间进行线性插值 | 可用于实现平滑的过渡效果,如物体的平滑移动、颜色的渐变等,t 值范围通常在 0 到 1 之间 |
| SmoothDamp(float current, float target, ref float currentVelocity, float smoothTime) | 实现平滑阻尼效果 | 让值朝着目标值平滑过渡,常用于相机跟随、物体移动的平滑控制,使运动更加自然 |
七、Application 类
对编写好的程序进行控制和权限管理,需要使用 Unity 提供的 Application 类。部分常用方法如下:
| dataPath | 游戏数据的路径 | 不同平台上路径有所不同,如在 PC 上是可执行文件所在目录下的相关文件夹,在移动设备上是特定的存储位置。用于读取游戏内的资源文件,如模型、纹理等 |
| persistentDataPath | 可持久化数据的路径 | 用于存储游戏运行过程中需要保存的数据,如玩家的存档、游戏设置等,该路径在不同平台上也有差异,但都保证数据的持久保存 |
| version | 游戏版本号 | 方便开发者和玩家了解游戏的版本信息,在进行版本更新提示、兼容性检查等方面有作用 |
| Quit() | 退出应用程序 | 在 PC、移动设备等平台上用于关闭游戏。但在某些平台(如 WebGL)上可能存在限制,无法直接使用该方法退出 |
| runInBackground | 设置应用程序是否在后台运行 | 可用于控制游戏在切换到后台时的行为,比如是否继续播放音乐、进行某些后台计算等 |
| isEditor | 判断当前是否在 Unity 编辑器中运行 | 在编写脚本时,可根据该属性进行不同的处理,如在编辑器中进行调试输出,而在发布版本中关闭某些调试功能 |
八、SceneManager 类
一个游戏通常由多个场景组成,场景的控制和切换是重要课题。SceneManager 类用于场景的管理。部分常用属性方法如下:
| 属性方法 | 详解 | 补充知识点 |
|---|---|---|
| sceneCount | 当前已加载场景的数量 | 在多场景加载的游戏中,可用于判断场景加载状态,如检查是否所有需要的场景都已成功加载 |
| GetActiveScene() | 获取当前激活的场景 | 可用于获取当前游戏进行的场景信息,如场景名称、场景中的物体数量等,也可用于切换场景前的一些准备工作 |
| LoadScene(string sceneName)、LoadScene(int sceneBuildIndex) | 加载指定名称或索引的场景 | 加载场景时,可以选择不同的加载模式,如单场景加载会替换当前场景,多场景加载则会将新场景叠加到现有场景中。在游戏的关卡切换、菜单场景与游戏场景切换等情况中常用 |
| MoveGameObjectToScene(GameObject go, Scene scene) | 将指定的游戏对象移动到另一个场景中 | 在不同场景间转移物体时使用,比如将角色从一个关卡场景转移到另一个关卡场景 |
| SetActiveScene(Scene scene) | 设置当前活动场景 | 在多场景同时加载时切换活动场景,例如在主菜单场景和游戏场景都加载的情况下,切换到游戏场景进行游戏 |
| UnloadSceneAsync (Scene scene) 或 UnloadSceneAsync (string sceneName) 或 UnloadSceneAsync (int sceneBuildIndex) | 异步卸载场景 | 在不需要某个场景时,可使用该方法卸载,释放内存资源。异步卸载不会阻塞主线程,保证游戏的流畅运行 |
九、Transform 组件相关
Transform 组件是每个游戏物体都会包含的组件,用于管理游戏物体的位置、旋转、缩放信息,以及物体与其子物体的关系。部分常用属性方法如下:
| 属性方法 | 详解 | 补充知识点 |
|---|---|---|
| position | 在世界坐标系中的位置 | 用于获取和设置物体在三维空间中的位置,在物体的移动、定位等操作中常用 |
| rotation | 在世界坐标系中的旋转 | 以四元数形式表示物体在世界空间中的旋转,控制物体的朝向 |
| localPosition | 在父物体局部坐标系中的位置 | 相对于父物体的位置,当物体有父物体时,可通过该属性设置其在父物体空间中的位置,常用于制作嵌套的物体结构,如角色身上的装备 |
| localRotation | 在父物体局部坐标系中的旋转 | 相对于父物体的旋转,在处理物体相对于父物体的旋转角度时使用 |
| parent | 物体的父级 Transform | 可用于获取或设置物体的父物体,改变物体的层级关系。设置父物体后,子物体的位置、旋转和缩放会受到父物体的影响 |
| DetachChildren() | 将所有子物体从当前 Transform 中分离,使其成为场景中的独立对象 | 在需要将子物体独立处理,不再受父物体变换影响时使用,如角色死亡后,身上装备掉落成为独立物体 |
| RotateAround(Vector3 point, Vector3 axis, float angle) | 使物体围绕指定的点和轴旋转指定的角度 | 可用于实现物体围绕某点的公转效果,如行星围绕恒星的旋转 |
| Find(string name) | 在当前 Transform 的子物体中查找指定名称的 Transform | 方便在复杂的层级结构中快速找到特定的子物体,如查找角色身上某个部位的 Transform |
十.结语
通过熟练掌握这些 Unity 常用的属性方法,开发者可以更轻松地构建出功能丰富、性能优良的游戏。后续还可以深入学习更多 API,不断提升自己的开发能力。





3064

被折叠的 条评论
为什么被折叠?



