Unity新手入门学习殿堂级知识详细讲解(图文)
发布于2026-07-22 阅读(0)
# 入门概述
## 什么是 Unity
Unity 最直接的理解方式就是:**一款跨平台的游戏引擎**。
那游戏引擎又是什么?简单来说,就是**帮我们把游戏开发所需的大部分功能集成好,然后我们在这个基础上,去添加和制作游戏的视觉、音效、玩法等**。
通常来说,游戏引擎会包含这几个核心模块:**图形、音频、物理、网络、脚本**。
## Unity引擎基础认知
**引擎定位**
Unity 作为一款跨平台的游戏引擎,不仅支持 2D/3D 开发,还能做 VR/AR 内容以及数字孪生项目。到了 2025 年,它已经迭代到了 2023 LTS 版本。
**核心优势**:可视化编辑器加上脚本扩展,覆盖了 Windows、macOS、Linux、Android、iOS 等 20 多个平台。
**版本选择**:新手建议直接用 Unity Hub 安装 2023.3.1f1 LTS 版本,这个版本在稳定性和功能完整性之间取得了不错的平衡。
**开发环境配置**
**安装流程**:通过 Unity Hub 下载编辑器时,记得勾选 Android Build Support 模块,VS2022 通常会作为默认的脚本编辑器。
**工程结构**:需要重点关注的三个目录是 `Assets`(资源)、`Library`(编译缓存)、`ProjectSettings`(配置)。搞清楚它们各自的作用,后续会省很多事。
## 编辑器核心操作
**界面功能区**
- **场景视图**:用 WASD 键移动视角,按住 Shift + 鼠标右键可以旋转摄像机。
- **层级面板**:支持拖拽排序和父子关系绑定,快捷键 Ctrl+D 可以快速复制物体。
**资源管理技巧**
- **模型导入**:设置 LOD 组可以减轻 GPU 负载。对于尺寸不是 2 的 n 次方的图片,建议启用 Sprite Packer 压缩。
- **脚本规范**:类名必须和文件名一致,使用 `IEnumerator` 实现协程可以避免卡顿。
---
# Unity 编辑器
## 项目模式分类
| 模式 | 介绍 |
|------|------|
| 2D | 使用 Unity 内置渲染管道的 2D 项目。默认采用 2D 的项目设置,包括图像导入参数、Sprite 打包器、场景视图、照明和正交相机。 |
| 3D | 使用 Unity 内置渲染管道的 3D 项目。默认采用 3D 的项目设置,包含 2018 的新功能——线性颜色空间和渐进式光照贴图。 |
| 3D with Extras (preview) | 与 3D 模板类似,但额外包含了后处理、预设和示例内容。 |
| High End (preview) | 适用于支持 Shader Model 5.0(DX11 及以上版本)的平台上的高端图形。该模板使用 HDRP,一种现代渲染流水线,包含高级材质类型和可配置的混合 Tile/Cluster 延迟/前向照明架构。 |
| Lightweight (preview) | 面向主要使用烘焙照明解决方案的项目。这是一个单通道前向渲染器,每个对象都有光照剔除。能减少绘图调用次数,是低端硬件的理想方案。 |
| Lightweight VR (preview) | 开发主要使用烘焙照明解决方案的 VR 项目,重点关注性能。 |
## 工程文件
一个完整的 Unity 项目包含以下文件:

| 文件夹名 | 作用 |
|----------|------|
| Assets | 工程中所有资源的存放目录 |
| Library | Unity 自动生成的中间文件目录 |
| Packages | Unity 包管理器相关文件存放目录 |
| ProjectSettings | 工程的相关设置 |
| Temp | 存放临时文件,关闭 Unity 后该目录会自动消失 |
| .sln 文件和 .csproj 文件 | Unity 自动生成的 Visual Studio 工程文件,用于代码编写和调试 |
**注意**:这些文件中,**Assets、Packages、ProjectSettings** 三个文件夹是**必须**的,不能删除。其他文件可以由 Unity **自动生成**。在存档或拷贝工程源文件时,可以只保留这三个文件夹来减小体积。
新建工程后打开工程文件夹,会发现 Scenes 文件夹下有两个文件:

- **SampleScene.unity**:Unity 引擎的**场景文件**,以 .unity 为扩展名。
- **SampleScene.unity.meta**:meta 文件保存了**对应资源的 ID、配置**等信息,非常重要。
## 编辑器主窗口

### Hierarchy 窗口
**简介**
一个游戏包含多个场景(关卡),一个场景包含多个 GameObject(游戏对象)。层级窗口展示 Scene 中所有的 GameObject。这些 GameObject 可以是模型、UI 元素,也可以是一个空物体。

**内容介绍**
1. **父子关系**:可以把一个杯子放在桌子上,移动或旋转桌子,杯子也会跟着移动和旋转,但相对位置不变。在 Unity 中,移动或旋转父物体时,子物体会跟随,但相对位置保持不变。
2. **显示顺序**:通过拖动可以改变物体在 Hierarchy 中的顺序。除了在 UI 系统中,改变顺序对显示和功能几乎没有影响。
### Inspector 窗口
**简介**
Inspector 窗口类似属性窗口,可以**修改、设置选中物体或资源的各种属性**。把 C# 脚本添加到 Component 里面,脚本就可以读写这些属性,从而实现游戏逻辑。

**使用方式**
1. **GameObject 的状态**

红框中的复选框表示物体是否激活:
- 勾选:激活状态,物体上的所有组件都会运行,物体会显示出来。
- 不勾选:隐藏状态,物体不会显示,组件也不会运行。
修改物体 active 状态的快捷键是 Shift + Alt + A。
2. **GameObject 的名称**
active 状态右侧的输入框就是 GameObject 的名称,也是 Hierarchy 中显示的名字。可以直接修改,按回车确认,或者在 Hierarchy 中右键 Rename(或按 F2 重命名)。
3. **Tag 标签**

Tag 即标签,用于**区分不同的物体**,比如用“朋友”和“敌人”来区分角色。默认标签是 Untagged。可以自定义标签,点击菜单最下方的 Add Tag... 即可添加。
**注意:每个物体只能有一个 Tag。**
4. **Layer 层**

Layer 在摄像机、物理检测等场景中非常有用。默认 Layer 是 Default。点击菜单最下方的 Add Layer... 可以添加。
**注意**:
- Layer 不能增加,只能选择 8~31 之间的数字,共 24 个。由于数量有限,能用 Tag 时尽量不用 Layer,而且一定要提前规划好分配。
- 每个物体只能选择一个 Layer。
## 碰撞层和显示层
- **碰撞层逻辑**:决定物体之间是否发生碰撞。
- **显示层逻辑**:决定物体之间的覆盖关系(谁在谁上层)。

## 碰撞层矩阵
矩阵中勾选与否代表两物体之间是否可以碰撞。

---
# Scene 和 GameObject 的理解
## Scene
一个游戏包含一个或多个 Scene。Scene 包含了游戏的环境、UI 和各种功能,可以把它理解为游戏的一个**关卡**。
新建一个 Unity 3D 工程时,默认会打开 SampleScene,场景中包含一个 **Main Camera(相机)** 和 **Directional Light(灯光)**。
- 相机是游戏中的眼睛,决定了**眼睛所在的位置和方向**。
- 灯光是游戏中的光源,能**照亮**游戏世界中的物体。
## GameObject
**场景中所有的物体都是一个 GameObject**,比如角色、房子、石头、灯光、相机、特效等。

但其实,一个 GameObject 只凭自身什么都做不了,它**只是个容器**。如果你想给它添加属性,让它变成灯光、树或相机,就需要给它添加 **Component(组件)**。可以给一个 GameObject 添加一个或多个 Component,来让它拥有不同的外观和功能。
Unity 提供了许多**内置组件**(如 Box Collider、Capsule Collider),能大大加快开发效率。我们还可以使用 **C# 脚本自定义组件**。
## Empty GameObject 的妙用
1. **类似文件夹的功效**
把空物体当作其他物体的父物体,就像文件夹一样,把其他物体放进去。这样更方便编辑管理——通过父物体整体移动、旋转、隐藏/显示,Hierarchy 的结构也更清晰。

2. **作为组件的容器**
很多组件并没有对应的模型、界面或特效,强加给任何一个物体都不合理。这时用空物体作为组件的容器更合适,比如游戏中全局使用的脚本。

3. **作为物体的轴心点**
有些模型的轴心点位置可能离模型本身很远或没有放在合适的位置,导致位置、旋转与物体本身不符。例如,一个轴心有问题的模型可能出现:位置坐标和实际位置有偏差,旋转时按轴心点旋转导致不按预期旋转。
---
# Component(组件)
## 什么是 Component
不同的 Component 为 GameObject 提供不同的功能。
## 怎么添加组件
要给 GameObject 添加功能,就需要给它添加组件。添加方式有三种:
- 点击 Inspector 中的 Add Component 按钮(快捷键 Ctrl+Shift+A),选择或搜索添加组件。
- 从 Project 中将脚本(脚本是一种自定义组件)拖到 GameObject 上。
- 打开菜单栏 Component,找到并点击要添加的组件。
## 修改组件属性就是修改游戏逻辑
1. **手动修改属性**
在 Unity 中直接修改属性,这是**游戏测试**人员做的事。通过手动修改属性后可以直接体验游戏,测试出组件各种属性的最佳值。
2. **C# 脚本修改属性**
通过 C# 脚本读取其他组件,再读写组件的属性,这是**游戏研发**人员做的事。这样可以根据不同情况设置组件属性值,完成游戏逻辑。
## Transform 组件
Transform 是每个 GameObject 必须有的组件,创建 GameObject 就会自动附带,而且不能删除。它在 Inspector 中显示在最上面。

它的功能是确定一个 GameObject 在空间中的位置、缩放和旋转:
- **Position**:位置,分别表示 x、y、z 轴的坐标。
- **Rotation**:旋转,分别表示围绕 x、y、z 轴的旋转,单位是角度。
- **Scale**:缩放,分别表示 x、y、z 轴方向上的缩放比例,1 代表不缩放。
这三个值都是相对于父物体的值,如果没有父物体,就是世界空间(相对于世界坐标原点)的值。
---
# 图片的使用
游戏开发中很多地方都会用到图片(又叫贴图、纹理)资源,比如模型的贴图、UI 界面图片、粒子特效的图片等。
对于大部分图片来说,导入设置保持默认即可。但了解各个参数,在遇到问题时才有线索去解决。
## 图片要求
1. **格式**
BMP、EXR、GIF、HDR、IFF、JPG、PICT、PNG、PSD、TGA、TIFF 等。**一般建议使用 PNG 格式。**
2. **尺寸大小**
理想情况下,贴图的宽高应该是 2 的 n 次幂(如 2、4、8、16、32、64、128、256、512、1024、2048 等),这样可以加快纹理取样速度,减少内存占用,提高性能。在可能的情况下,尽量使用 2 的 n 次幂大小的贴图,不一定是正方形,比如 64×128 也可以。如果贴图出现加载不出来的情况,可以检查一下是否尺寸过大。
## 导入设置
设置并不会改变图片源文件,只是 Unity 引擎在使用这张图片时,会使用设置后的数据。
### 1. Texture Type
贴图有多种用途,导入时也需要进行不同的设置。可选项有:
- **Default**:最常用的设置,可以设置贴图导入的大部分属性。
- **Normal Map**:用于法线贴图(模型常用的一种贴图类型)。
- **Editor GUI and Legacy**:用于编辑器 GUI 或旧的 OnGUI。
- **Sprite (2D and UI)**:用于 2D 游戏和 UI。
- **Cursor**:用于自定义光标。
- **Cookie**:用于灯光的 Cookie 属性贴图。
- **Lightmap**:用于光照贴图(在 Max 或 Maya 中烘焙过的模型的光照贴图导入后使用此选项)。
- **Single Channel**:用于只需要一个通道的情况。
### 2. Texture Shape
- **2D**:默认,大部分图片使用 2D 设置,比如模型贴图、UI 等。
- **Cube**:贴图会被设置为 Cubemap,一般用于天空盒、反射等情况。这种贴图需要按特定格式制作,在 Unity 中会被展开为立方体或球体。
### 3. sRGB (Color Texture)
默认选中。选中后贴图的颜色会存储在伽马空间中。非 HDR 颜色的纹理应该选中此属性(如反射和高光贴图)。如果贴图存储了特定含义的信息,并且在 Shader 中需要使用对应值(例如平滑度或金属度),则不要选中。
### 4. Alpha Source
设置 Alpha 通道的生成方式,默认是 Input Texture Alpha。
- **None**:不管图片本身是否有 Alpha 通道,该贴图将没有 Alpha 通道。
- **Input Texture Alpha**:如果图片有 Alpha 通道,使用它;如果没有,则没有 Alpha 通道。
- **From Gray Scale**:从图片 RGB 值的平均值生成 Alpha 通道。
### 5. Alpha is Transparency
默认选中。是否将 Alpha 通道作为图片的透明度。一般情况都会选中;某些情况下仅在代码中使用 Alpha 通道中的数据,但图片本身是非透明的,则不选中。
### 6. Advanced(高级设置)
**6.1 Non Power of 2(非 2 的 n 次幂)**
前面提到贴图尺寸为 2 的 n 次幂能提高性能,但有时不得不使用非 2 的 n 次幂,这时就需要设置此属性。默认值是 To nearest。
**6.2 Read/Write Enabled**
默认禁用。有时需要在代码中获取贴图数据(如 Texture2D.SetPixels、Texture2D.GetPixels 等),需要启用此功能。
**注意**:启用后,会创建该 Texture 的副本,内存占用加倍。如果不是必须读写贴图数据,不要选中。
**6.3 Generate Mip Maps**
Mipmap 是一组逐渐缩小的图片,用于提高 3D 实时渲染性能。远离相机的物体会使用更小尺寸的贴图。使用 Mipmap 会增加 33% 的内存占用,但不用会导致更大的性能损失。对于游戏内的贴图,基本上都应该使用 Mipmap,例外情况包括 UI 图片、天空盒、光标、Cookie 贴图。Mipmap 也可以避免很多种贴图失真和闪烁的情况。
**6.4 Mipmap 预览**
在贴图的 Preview 窗口中,可以通过右上角的滚动条查看 Mipmap 不同级别的情况。
**6.5 Wrap Mode**
默认值是 Clamp。这个属性设置贴图在平铺时的不同形式,需要同时设置材质球中的 Tiling 属性才能看出效果。

- **6.5.1 Repeat**:平铺时自身重复。

- **6.5.2 Clamp**:贴图的边缘会被拉伸。

- **6.5.3 Mirror**:重复时呈现镜像效果。

- **6.5.4 Mirror Once**:只镜像一次,然后边缘拉伸。

- **6.5.5 Per-axis**:每个轴可以单独设置平铺模式。


**6.6 Filter Mode**
默认是 Bilinear。选择纹理在被 3D 变换拉伸时如何被过滤。
**6.7 Aniso Level**
以陡峭角度查看纹理时提高纹理质量。对于地板和地面纹理来说很有用,但也会占用显卡资源。
### 7. 压缩设置
压缩设置可以设置一个整体参数,也可以对不同平台单独设置。

**7.1 Max Size**:设置贴图的最大尺寸。
**7.2 Resize Algorithm**:缩放算法。
- Mitchell:默认的高质量缩放算法。
- Bilinear:对于噪波贴图,这个算法可能有更锐利的细节。
**7.3 Compression**:压缩质量设置。压缩质量越高,图片保真度越高,导入 Unity 编辑器所花时间越多。
**7.4 Format**:在 Default 中,Unity 会根据选择的压缩质量自动选择 Format。也可以对不同平台单独设置。
**7.5 Use Crunch Compress**:一种有损压缩格式,能最大程度降低贴图占用空间。Crunch Textures 可能需要较长时间压缩,但运行时解压缩速度非常快。
### 8. Label 设置
在 Project 中可以通过 label 搜索资源,一个资源可以设置多个 label。
---
# 渲染与贴图
## 渲染
在 Unity 中渲染一个物体,最重要的三个概念是:**材质(Material)、贴图(Texture)、着色器(Shader)**。
- **材质**:通过使用贴图、Tiling 参数、颜色参数等定义物体表面应该如何呈现。材质的可配置参数取决于它使用的着色器。
- **着色器**:一段代码,基于场景的光照信息和材质的配置,计算物体最终渲染的顶点位置和颜色。着色器决定了材质上的可配置参数。
- **贴图**:位图图像。材质可以引用贴图,着色器在计算 GameObject 表面颜色时可以使用贴图中的信息。除了基本颜色(Albedo)外,贴图还可以丰富材质表面的许多其他方面,例如自发光、表面凹凸等。
三者之间的关系:
- 一个材质只能使用一种着色器,一种着色器可以被多个材质使用。
- 一个材质可能需要多张不同的贴图(漫反射贴图、法线贴图、高光贴图等),一张贴图可以被多个不同的材质复用。
- 材质可以和网格 Mesh 关联起来,网格的表面最终会显示成对应材质的样子。
对于大多数写实渲染需求(角色、场景、环境等),使用内置的 Standard 着色器通常是最好的选择。
## Texture(贴图)
通常情况下,物体的 Mesh 网格只给出了大致形状,大部分细节都由贴图提供。贴图是绘制在物体网格表面的图像。可以把贴图想象成有弹性的壁纸,通过拉伸、压缩贴到网格表面。贴图的定位(UV 信息)通常由 3D 建模软件完成。
1. **3D 模型的贴图**
一张贴图要贴到模型上,必须先赋予一个材质,再将材质与模型关联。
贴图有不同类型和用途,例如:
- **Albedo(反照率)贴图**:最基础的贴图,表示材质表面反射的颜色及比率。

- **法线贴图**:一种特殊的贴图,通过贴图方式实现模型表面的凹凸,增加细节。

其他用途的贴图,在讲解 Unity 内置的 Standard Shader 时会涉及。
一个材质可以使用多张贴图,比如同时使用漫反射贴图和法线贴图,让模型在基本颜色基础上细节更丰富。
贴图尺寸应尽可能使用 2 的 n 次幂,比如 256×256、512×1024 等。
2. **2D 图形**
2D 游戏中,贴图需要设置为 Sprite。在场景中绘制时类似一个纸片,没有厚度。一般 2D 游戏的角色需要一系列图片来实现不同状态或动画。
3. **GUI**
使用 Unity 内置的 GUI 系统时,用到的图片需要设置为 Sprite。游戏的图形用户界面(GUI)可以让玩家查看信息、进行交互。虽然界面图片与模型表面的贴图有很大不同,但都是使用图片资源。
4. **粒子**
网格适合表示实体物体,但对于火焰、烟雾、火花等效果并不合适。粒子系统可以更好地处理这类特效。粒子一般用来表示很小的东西,比如液体或气体。大量粒子一起运动时,能产生非常逼真的效果。例如,可以将火焰贴图的粒子从中心点高速发射出去模拟爆炸;或者用大量高速向下运动的水珠模拟瀑布。
---
# 材质
## 什么是材质
材质是连接贴图、着色器和模型的重要资源。
## 创建材质
在 Project 窗口任意文件夹或空白处右键,Create > Material 可以创建一个新的材质。新创建的材质默认使用 Standard 着色器,所有贴图属性为空,如下图所示:

材质创建后,可以在 Project 窗口中选中,在 Inspector 中修改其所有属性。将材质拖拽到场景或 Hierarchy 中的任一物体,即可将材质赋予对应物体。
**注意**:如果一个模型有多个材质,不要使用拖拽方式赋予材质,否则会将所有材质全部替换为拖拽的材质。正确做法是:将材质拖拽到模型 Mesh Renderer 的 Materials 列表的对应位置。
## 编辑材质
编辑材质的第一步是确定要使用的着色器,点击材质的 Shader 下拉菜单选择。

选中的着色器决定了材质包含的可配置属性。属性类型包括颜色、滑条、贴图、数字、向量。如果将材质赋予了场景中的模型,修改属性会实时反馈到场景模型上。
修改贴图属性有两种办法:
- 将贴图从 Project 窗口中拖到材质的贴图属性小方框中(最常用)。

- 点击材质属性的小圆点,从列表中选择贴图。

---
# 总结
从引擎基础认知到编辑器操作,从场景与游戏对象的概念到组件、图片、材质、渲染……Unity 的入门知识体系其实相当清晰。关键在于理解每个模块的核心作用,以及它们之间如何相互配合。掌握了这些,后续深入学习和实际开发就会顺畅很多。
本文转载于:https://www.jb51.net/program/3476248fg.htm 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。