Skip to content Skip to footer

unity常用功能知识

Unity 作为一款强大的跨平台游戏引擎和实时内容开发平台,其功能极其丰富。掌握常用核心功能是高效开发的基础。以下是一些 Unity 中最常用和关键的功能知识领域:

🧱 一、核心概念与基础

场景 (Scene):

游戏世界的基本容器,包含所有游戏对象、光照、环境设置等。

通常代表一个关卡、菜单界面或游戏中的一个独立部分。

可以在不同的场景之间切换。

游戏对象 (GameObject):

场景中的基本实体,代表游戏中的一切(角色、道具、灯光、摄像机、空物体等)。

本身只是一个容器,需要通过添加组件来赋予其功能、外观和行为。

组件 (Component):

附加到游戏对象上的模块化功能块。🎛️

核心功能来源: 没有组件,GameObject 只是一个空壳。

常见内置组件:

Transform: 定义对象的位置、旋转、缩放(每个 GameObject 必有)。

Mesh Filter: 持有 3D 网格数据。

Mesh Renderer: 渲染 Mesh Filter 提供的网格,应用材质使其可见。

Sprite Renderer: 渲染 2D 精灵。

Camera: 定义玩家视角,渲染场景。

Light: 提供场景光照(方向光、点光源、聚光灯等)。

Rigidbody: 使物体受物理引擎控制(重力、碰撞、力)。

Collider: 定义物体的物理碰撞形状(盒体、球体、胶囊体、网格等)。

Animator: 控制基于状态机的动画(使用 Animator Controller)。

Audio Source: 播放声音。

Audio Listener: (通常附加在主摄像机上)接收声音。

脚本组件: 开发者编写的 C# 脚本本质也是一种自定义组件。

预制体 (Prefab):

一种可重复使用的游戏对象模板(包含其所有组件、子对象和属性设置)。

核心价值: 提高效率、保证一致性、方便批量修改。

在场景中放置的是预制体的实例 (Instance)。

修改预制体资源会影响到其所有实例(可选择性覆盖实例上的修改)。

⚙️ 二、物理系统 (Physics)

刚体 (Rigidbody):

使物体受物理引擎控制(牛顿力学)。

属性:质量、阻力、角阻力、是否受重力、是否运动学(Kinematic - 脚本控制不受物理影响)。

方法:AddForce, AddTorque, MovePosition, MoveRotation (常用于运动学刚体)。

碰撞体 (Collider):

定义物体的物理形状,用于碰撞检测。

类型:盒型碰撞体 (Box Collider)、球型碰撞体 (Sphere Collider)、胶囊碰撞体 (Capsule Collider)、网格碰撞体 (Mesh Collider - 性能开销大)、地形碰撞体 (Terrain Collider)、车轮碰撞体 (Wheel Collider) 等。

重要: 物理碰撞需要双方都有碰撞体 (Collider),并且至少一方有刚体 (Rigidbody)。

触发器 (Trigger):

将碰撞体的 Is Trigger 属性设为 true。

不再产生物理碰撞效果(不会阻挡或弹开),但会检测重叠。

用于检测物体进入、停留或离开某个区域(如收集品、陷阱区域、传送门)。

物理材质 (Physic Material):

定义碰撞表面的物理属性:摩擦力 (Friction)、弹力 (Bounciness)。

物理层 (Layers) 和碰撞矩阵 (Collision Matrix):

用于精确控制哪些层(Layer)的物体之间会发生碰撞或触发检测,优化性能。

🎬 三、动画系统 (Animation)

Animation Clip (动画片段):

存储具体的动画数据(对象属性的变化曲线,如位置、旋转、缩放、材质属性、动画参数等)。

Animator Controller (动画控制器):

一个状态机 (State Machine),用于组织和管理多个 Animation Clip 以及它们之间的过渡逻辑。

包含状态 (States)、过渡 (Transitions)、参数 (Parameters - Float, Int, Bool, Trigger)。

Animator 组件:

附加在需要播放动画的游戏对象上。

引用一个 Animator Controller 资源。

通过脚本修改其参数 (Animator.SetFloat, SetBool, SetTrigger, SetInteger) 来控制状态机的流转,从而播放不同的动画。

2D 动画:

Sprite Sheet Animation: 使用序列帧图片在 Sprite Renderer 上切换 Sprite 来制作动画(可通过 Animator 控制,或简单脚本控制)。

2D 骨骼动画 (2D Animation Package): 类似 3D 骨骼动画,为 2D 精灵创建骨骼和蒙皮,实现更流畅复杂的动画。

💻 四、脚本编程 (Scripting - C#)

核心语言: C#。

MonoBehaviour 基类:

所有附加到 GameObject 上的脚本都继承自 MonoBehaviour。

提供了一系列重要的生命周期函数 (Lifecycle Methods):

Awake(): 脚本实例被创建时调用(即使脚本未启用)。用于初始化内部状态、获取引用。早于 Start。

Start(): 在脚本启用后,第一次 Update 之前调用。用于初始化依赖其他对象的内容。

Update(): 每帧调用一次。用于处理游戏逻辑、输入、非物理相关的移动。

FixedUpdate(): 按固定时间步长调用(默认 0.02s,可在 Project Settings -> Time 设置)。用于处理物理相关逻辑(如 Rigidbody 操作)。

LateUpdate(): 在所有 Update 执行完毕后调用。常用于跟随逻辑(如摄像机跟随)。

OnEnable() / OnDisable(): 当脚本被启用/禁用时调用。

OnDestroy(): 当脚本或 GameObject 被销毁时调用。

访问组件:

GetComponent(): 获取当前 GameObject 上类型为 T 的组件。

GetComponentInChildren() / GetComponentInParent(): 在子对象/父对象中查找组件。

访问其他对象:

FindObjectOfType(): 查找场景中第一个激活的类型为 T 的对象(性能开销大,慎用)。

FindGameObjectsWithTag(string tag): 查找所有带有特定标签的 GameObject。

推荐方式: 通过 Inspector 面板拖拽赋值(public 变量或 [SerializeField] private 变量),或通过消息传递 (SendMessage, BroadcastMessage - 较慢) 或更现代的依赖注入/事件系统。

输入系统 (Input System):

旧系统:Input.GetKey(KeyCode), Input.GetMouseButton(), Input.GetAxis("Horizontal") (在 Update 中检测)。

新输入系统 (Input System Package): 更强大、灵活,支持多种设备绑定和动作映射。需要导入包并设置 Input Actions。

🖥️ 五、用户界面 (UI - uGUI)

Canvas: 所有 UI 元素的根容器和绘制区域。渲染模式:Screen Space - Overlay/Camera, World Space。

基本 UI 控件:

Image: 显示精灵或纯色。

Text (Legacy) / TextMeshPro - Text (TMP): 显示文本。强烈推荐使用 TextMeshPro (TMP),效果更佳。

Button: 可点击按钮。

Toggle: 开关。

Slider: 滑块。

Scroll View: 滚动视图。

Input Field (Legacy) / TMP Input Field: 文本输入框。

Rect Transform:

UI 元素特有的变换组件,用于控制位置、大小、旋转、缩放。

锚点 (Anchors) 和轴心点 (Pivot): 核心概念!决定 UI 元素如何相对于父 Canvas 或父 UI 元素进行定位和缩放适配。

布局组件 (Layout Groups):

自动排列子 UI 元素:Horizontal Layout Group, Vertical Layout Group, Grid Layout Group。

事件系统 (EventSystem):

处理 UI 交互(点击、悬停等)的核心系统。通常场景中需要一个 EventSystem GameObject。

通过 EventTrigger 组件或代码实现 UI 事件响应 (onClick.AddListener)。

📦 六、资源管理 (Asset Management)

导入资源: 将外部文件(模型、纹理、音频、脚本、字体等)拖入 Assets 文件夹。Unity 会自动导入并根据类型设置默认导入设置。

常用资源类型:

模型 (FBX, OBJ): 导入设置包括缩放、材质生成、动画、优化等。

纹理 (PNG, JPG, TGA, PSD, TIF): 导入设置包括纹理类型 (Default, Normal map, Sprite, GUI...)、压缩格式、最大尺寸、生成 Mipmaps 等。

音频 (WAV, MP3, OGG): 导入设置包括加载类型 (Decompress On Load, Compressed In Memory, Streaming)、压缩格式、是否 3D 音效等。

材质 (Material): 定义物体表面的着色方式(颜色、光泽、凹凸等),引用着色器 (Shader) 和纹理。

着色器 (Shader): 定义如何渲染物体表面的程序。可以使用内置着色器(Standard, URP Lit, HDRP Lit)或编写自定义着色器(ShaderLab/HLSL)。

Resources 文件夹: 特殊文件夹名,可通过 Resources.Load() 动态加载资源(不推荐用于所有资源,打包后不易更新)。

AssetBundles: 更高级的资源动态加载和热更新方案,将资源打包成 AssetBundle 文件,在运行时按需加载。

Addressables: Unity 推荐的现代资源管理系统,提供更强大的异步加载、依赖管理、内存管理和远程资源更新能力。

🔊 七、音频 (Audio)

Audio Source: 播放音频剪辑的组件。属性:音量、音调、空间混合(2D/3D)、循环、播放唤醒等。

Audio Listener: 接收场景中声音的组件(通常附加在主摄像机上)。

Audio Clip: 音频资源文件。

3D 音效: 通过 AudioSource.spatialBlend > 0 启用,声音会根据 Audio Source 和 Audio Listener 的位置、距离、方向变化(衰减、多普勒效应等)。

📐 八、光照与渲染 (Lighting & Rendering)

光源类型 (Light): 方向光 (Directional - 模拟太阳)、点光源 (Point)、聚光灯 (Spot)、区域光 (Area - 烘焙用)。

光照模式 (Light Mode):

Realtime: 每帧实时计算光照。性能开销大。

Baked: 光照信息预先计算并“烘焙”到光照贴图 (Lightmap) 中。运行时开销小,但光照静态。

Mixed: 结合 Realtime 和 Baked,静态物体用烘焙光,动态物体受实时光影响(需要更多设置)。

全局光照 (Global Illumination - GI): 模拟光线在场景中多次反弹的效果,使光照更真实自然(主要依赖烘焙或实时光线追踪)。

光照贴图 (Lightmap): 存储烘焙光照结果(亮度和方向)的纹理,应用于静态物体。

反射探针 (Reflection Probe): 捕获场景特定位置的环境,用于提供物体表面的反射信息。

渲染管线 (Render Pipeline):

Built-in Render Pipeline: Unity 传统内置管线。

Universal Render Pipeline (URP): 轻量级、可扩展管线,适用于移动端、PC、主机等多种平台,是大多数项目的推荐选择。

High Definition Render Pipeline (HDRP): 面向高端 PC 和主机的高保真图形管线,提供最先进的渲染效果。

选择并配置渲染管线对项目的视觉效果和性能至关重要。

🚀 九、构建与发布 (Build & Deployment)

构建设置 (Build Settings): 选择目标平台 (Windows, Mac, iOS, Android, WebGL 等),添加要包含的场景。

Player Settings: 配置特定于目标平台的设置(公司名、产品名、图标、分辨率设置、权限、SDK 路径等)。

构建过程: Unity 将项目编译打包成目标平台可执行的文件。

🔧 十、其他常用工具与概念

粒子系统 (Particle System): 创建火焰、烟雾、魔法效果、爆炸等。

导航与寻路 (Navigation): 使用 NavMesh(导航网格)让 AI 角色在场景中智能移动和寻路。

地形系统 (Terrain): 创建大型自然景观(山脉、平原、湖泊),支持高度绘制、纹理绘制、树木和草种植。

时间控制 (Time): Time.deltaTime (上一帧耗时,用于帧率无关移动), Time.timeScale (全局时间缩放,用于慢动作/暂停效果)。

协程 (Coroutines): 使用 IEnumerator 和 yield return 实现的轻量级“伪线程”,用于处理异步操作、延时、序列化任务等。

序列化 (Serialization): Unity 自动保存和加载组件属性值到场景/预制体的机制(支持 public 字段或 [SerializeField] private 字段)。

版本控制集成: Unity 支持与 Git, Plastic SCM, Perforce 等版本控制系统协作(注意处理 .meta 文件和大型二进制文件)。

Package Manager: 管理 Unity 内置或从 Asset Store 下载的包(功能扩展、工具等)。

📚 学习路径建议

官方教程: Unity Learn 平台是绝佳的起点(大量免费高质量教程)。

官方文档: 遇到具体 API 或功能时查阅,非常全面。

实践项目: 从小游戏开始(如滚球、2D 平台跳跃、射击),边做边学。

社区: Unity 论坛、Stack Overflow、Reddit (r/Unity3D) 是提问和找答案的好地方。

Asset Store: 学习优秀案例,使用插件加速开发(但先理解原理)。

掌握这些常用功能是成为合格 Unity 开发者的基础。随着项目深入,你会接触到更高级的特性和优化技巧。祝你学习顺利!💪