商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > Unity新手入门学习殿堂级知识详细讲解(图文)

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 项目包含以下文件: ![Unity项目文件结构](http://img.318050.com/uploads/20260408/177564412569d62ddd4ec4a.webp) | 文件夹名 | 作用 | |----------|------| | Assets | 工程中所有资源的存放目录 | | Library | Unity 自动生成的中间文件目录 | | Packages | Unity 包管理器相关文件存放目录 | | ProjectSettings | 工程的相关设置 | | Temp | 存放临时文件,关闭 Unity 后该目录会自动消失 | | .sln 文件和 .csproj 文件 | Unity 自动生成的 Visual Studio 工程文件,用于代码编写和调试 | **注意**:这些文件中,**Assets、Packages、ProjectSettings** 三个文件夹是**必须**的,不能删除。其他文件可以由 Unity **自动生成**。在存档或拷贝工程源文件时,可以只保留这三个文件夹来减小体积。 新建工程后打开工程文件夹,会发现 Scenes 文件夹下有两个文件: ![场景文件示例](http://img.318050.com/uploads/20260408/177564412569d62dddb6b93.webp) - **SampleScene.unity**:Unity 引擎的**场景文件**,以 .unity 为扩展名。 - **SampleScene.unity.meta**:meta 文件保存了**对应资源的 ID、配置**等信息,非常重要。 ## 编辑器主窗口 ![编辑器主窗口](http://img.318050.com/uploads/20260408/177564412669d62dde2c5f6.webp) ### Hierarchy 窗口 **简介** 一个游戏包含多个场景(关卡),一个场景包含多个 GameObject(游戏对象)。层级窗口展示 Scene 中所有的 GameObject。这些 GameObject 可以是模型、UI 元素,也可以是一个空物体。 ![Hierarchy窗口](http://img.318050.com/uploads/20260408/177564412669d62dde861cf.webp) **内容介绍** 1. **父子关系**:可以把一个杯子放在桌子上,移动或旋转桌子,杯子也会跟着移动和旋转,但相对位置不变。在 Unity 中,移动或旋转父物体时,子物体会跟随,但相对位置保持不变。 2. **显示顺序**:通过拖动可以改变物体在 Hierarchy 中的顺序。除了在 UI 系统中,改变顺序对显示和功能几乎没有影响。 ### Inspector 窗口 **简介** Inspector 窗口类似属性窗口,可以**修改、设置选中物体或资源的各种属性**。把 C# 脚本添加到 Component 里面,脚本就可以读写这些属性,从而实现游戏逻辑。 ![Inspector窗口](http://img.318050.com/uploads/20260408/177564412669d62ddedca2e.webp) **使用方式** 1. **GameObject 的状态** ![物体状态](http://img.318050.com/uploads/20260408/177564412769d62ddf5bd2e.webp) 红框中的复选框表示物体是否激活: - 勾选:激活状态,物体上的所有组件都会运行,物体会显示出来。 - 不勾选:隐藏状态,物体不会显示,组件也不会运行。 修改物体 active 状态的快捷键是 Shift + Alt + A。 2. **GameObject 的名称** active 状态右侧的输入框就是 GameObject 的名称,也是 Hierarchy 中显示的名字。可以直接修改,按回车确认,或者在 Hierarchy 中右键 Rename(或按 F2 重命名)。 3. **Tag 标签** ![Tag设置](http://img.318050.com/uploads/20260408/177564412769d62ddfac93c.webp) Tag 即标签,用于**区分不同的物体**,比如用“朋友”和“敌人”来区分角色。默认标签是 Untagged。可以自定义标签,点击菜单最下方的 Add Tag... 即可添加。 **注意:每个物体只能有一个 Tag。** 4. **Layer 层** ![Layer设置](http://img.318050.com/uploads/20260408/177564412869d62de00f653.webp) Layer 在摄像机、物理检测等场景中非常有用。默认 Layer 是 Default。点击菜单最下方的 Add Layer... 可以添加。 **注意**: - Layer 不能增加,只能选择 8~31 之间的数字,共 24 个。由于数量有限,能用 Tag 时尽量不用 Layer,而且一定要提前规划好分配。 - 每个物体只能选择一个 Layer。 ## 碰撞层和显示层 - **碰撞层逻辑**:决定物体之间是否发生碰撞。 - **显示层逻辑**:决定物体之间的覆盖关系(谁在谁上层)。 ![碰撞层与显示层示意图](http://img.318050.com/uploads/20260408/177564412769d62ddf5bd2e.webp) ## 碰撞层矩阵 矩阵中勾选与否代表两物体之间是否可以碰撞。 ![碰撞层矩阵](http://img.318050.com/uploads/20260408/177564412869d62de0945b2.webp) --- # Scene 和 GameObject 的理解 ## Scene 一个游戏包含一个或多个 Scene。Scene 包含了游戏的环境、UI 和各种功能,可以把它理解为游戏的一个**关卡**。 新建一个 Unity 3D 工程时,默认会打开 SampleScene,场景中包含一个 **Main Camera(相机)** 和 **Directional Light(灯光)**。 - 相机是游戏中的眼睛,决定了**眼睛所在的位置和方向**。 - 灯光是游戏中的光源,能**照亮**游戏世界中的物体。 ## GameObject **场景中所有的物体都是一个 GameObject**,比如角色、房子、石头、灯光、相机、特效等。 ![GameObject示例](http://img.318050.com/uploads/20260408/177564412869d62de0f03e9.webp) 但其实,一个 GameObject 只凭自身什么都做不了,它**只是个容器**。如果你想给它添加属性,让它变成灯光、树或相机,就需要给它添加 **Component(组件)**。可以给一个 GameObject 添加一个或多个 Component,来让它拥有不同的外观和功能。 Unity 提供了许多**内置组件**(如 Box Collider、Capsule Collider),能大大加快开发效率。我们还可以使用 **C# 脚本自定义组件**。 ## Empty GameObject 的妙用 1. **类似文件夹的功效** 把空物体当作其他物体的父物体,就像文件夹一样,把其他物体放进去。这样更方便编辑管理——通过父物体整体移动、旋转、隐藏/显示,Hierarchy 的结构也更清晰。 ![空物体作为文件夹](http://img.318050.com/uploads/20260408/177564412969d62de13fe67.webp) 2. **作为组件的容器** 很多组件并没有对应的模型、界面或特效,强加给任何一个物体都不合理。这时用空物体作为组件的容器更合适,比如游戏中全局使用的脚本。 ![空物体作为组件容器](http://img.318050.com/uploads/20260408/177564412969d62de1a8791.webp) 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 中显示在最上面。 ![Transform组件](http://img.318050.com/uploads/20260408/177564412969d62de1f1347.webp) 它的功能是确定一个 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 属性才能看出效果。 ![Wrap Mode示例](http://img.318050.com/uploads/20260408/177564413069d62de261811.webp) - **6.5.1 Repeat**:平铺时自身重复。 ![Repeat](http://img.318050.com/uploads/20260408/177564412969d62de1a8791.webp) - **6.5.2 Clamp**:贴图的边缘会被拉伸。 ![Clamp](http://img.318050.com/uploads/20260408/177564412569d62dddb6b93.webp) - **6.5.3 Mirror**:重复时呈现镜像效果。 ![Mirror](http://img.318050.com/uploads/20260408/177564413069d62de2e7e62.webp) - **6.5.4 Mirror Once**:只镜像一次,然后边缘拉伸。 ![Mirror Once](http://img.318050.com/uploads/20260408/177564413169d62de344753.webp) - **6.5.5 Per-axis**:每个轴可以单独设置平铺模式。 ![Per-axis](http://img.318050.com/uploads/20260408/177564413169d62de3a7d1f.webp) ![Per-axis示例](http://img.318050.com/uploads/20260408/177564413269d62de412992.webp) **6.6 Filter Mode** 默认是 Bilinear。选择纹理在被 3D 变换拉伸时如何被过滤。 **6.7 Aniso Level** 以陡峭角度查看纹理时提高纹理质量。对于地板和地面纹理来说很有用,但也会占用显卡资源。 ### 7. 压缩设置 压缩设置可以设置一个整体参数,也可以对不同平台单独设置。 ![压缩设置](http://img.318050.com/uploads/20260408/177564413269d62de463b6c.webp) **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(反照率)贴图**:最基础的贴图,表示材质表面反射的颜色及比率。 ![Albedo贴图](http://img.318050.com/uploads/20260408/177564413269d62de4c1396.webp) - **法线贴图**:一种特殊的贴图,通过贴图方式实现模型表面的凹凸,增加细节。 ![法线贴图](http://img.318050.com/uploads/20260408/177564413369d62de53e4c9.webp) 其他用途的贴图,在讲解 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 着色器,所有贴图属性为空,如下图所示: ![创建材质](http://img.318050.com/uploads/20260408/177564413369d62de599352.webp) 材质创建后,可以在 Project 窗口中选中,在 Inspector 中修改其所有属性。将材质拖拽到场景或 Hierarchy 中的任一物体,即可将材质赋予对应物体。 **注意**:如果一个模型有多个材质,不要使用拖拽方式赋予材质,否则会将所有材质全部替换为拖拽的材质。正确做法是:将材质拖拽到模型 Mesh Renderer 的 Materials 列表的对应位置。 ## 编辑材质 编辑材质的第一步是确定要使用的着色器,点击材质的 Shader 下拉菜单选择。 ![选择着色器](http://img.318050.com/uploads/20260408/177564413469d62de60274a.webp) 选中的着色器决定了材质包含的可配置属性。属性类型包括颜色、滑条、贴图、数字、向量。如果将材质赋予了场景中的模型,修改属性会实时反馈到场景模型上。 修改贴图属性有两种办法: - 将贴图从 Project 窗口中拖到材质的贴图属性小方框中(最常用)。 ![拖拽贴图](http://img.318050.com/uploads/20260408/177564413469d62de657b17.webp) - 点击材质属性的小圆点,从列表中选择贴图。 ![选择贴图](http://img.318050.com/uploads/20260408/177564413169d62de3a7d1f.webp) --- # 总结 从引擎基础认知到编辑器操作,从场景与游戏对象的概念到组件、图片、材质、渲染……Unity 的入门知识体系其实相当清晰。关键在于理解每个模块的核心作用,以及它们之间如何相互配合。掌握了这些,后续深入学习和实际开发就会顺畅很多。
本文转载于:https://www.jb51.net/program/3476248fg.htm 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注