很多人在学 Unity 时都会经历同一个阶段:跟着教程建了个 Cube,加了个物理碰撞,点击播放看到小球落地,觉得自己“会了一点”。但合上教程,面对空白场景,光标停在 Hierarchy 和 Inspector 之间,大脑也跟着空白了。
这不是教程的问题,也不是你不够聪明,而是你一直在“背操作”,没有建立“操作之间的因果”。Unity 表面上是菜单和窗口的组合,本质上是一套组件化引擎:场景里有物体,物体上有组件,组件通过资源驱动,最后由构建管线变成独立程序。只要把这五个点串成闭环,Unity 6 的基础操作就不会再散落成一个个孤立技巧。
本文就从 Unity 6 的界面、材质、脚本、UI、打包五个方向,把这套闭环讲透。读完你不会只看懂菜单,而是能自己从空项目出发,完成一个带交互、带 UI、可打包运行的桌面小 Demo。你应该把这篇文章当作“引擎入门先修课”的实操地图,而不是又一个操作清单。
1. 这篇文章真正要解决的问题
先给一个明确判断:Unity 6 入门最大的障碍不是版本新旧,而是认知模型没转过来。
很多人是从 Java、JavaScript、Python 这类“类 + 方法”的编程方式过来的,习惯把一切功能写在代码里。Unity 是另一种思路:场景中的每个物件都是一个 GameObject,GameObject 上可以挂无数的 Component,每个 Component 管理一种能力。移动是 Transform,渲染是 MeshRenderer,行为脚本是自己写的 MonoBehaviour。代码只是众多组件中的一种,而不是一切。
如果你只背菜单,会发现 Unity 6 的界面改一个按钮位置,你就迷路;如果你理解组件模型,哪怕界面全换成英文,你也能很快找到对应入口。
所以这篇文章要解决的是三件事:
- 用最小闭环建立 Unity 6 的操作框架:建物体、改组件、换材质、写脚本、搭 UI、打包;
- 解释每个步骤背后的为什么,例如为什么脚本要挂到物体上、为什么打包前要保存场景、为什么 UI 点击需要 EventSystem;
- 把最容易让新手卡住的地方单独拉出来讲,减少你在论坛里反复搜问题的时间。
如果你是计算机图形学刚入门、想学 Unity 6 但还没系统操作过引擎,或者曾经试着学过但半途放弃,这篇文章就是为你准备的。
2. 核心概念:Unity 6 的组件化引擎与关键变化
在动手操作之前,先把最基本的五个概念讲清楚,后续你用 Unity 6 时所有操作都会反复落到这些词上。
2.1 GameObject、Component 与 Transform
Unity 里没有“直接摆一个方块”这种全局函数。你做的每一步,都是在创建 GameObject,然后给它加组件。
GameObject 是一个空壳,本身没有“怎么显示”“怎么运动”“怎么被点击”的能力。能力全部来自 Component。比如一个 Cube 的默认结构通常是:
- Transform:决定位置、旋转、缩放;
- MeshFilter:决定用什么网格模型;
- MeshRenderer:决定这个网格怎么渲染出来;
- Box Collider:决定它有没有碰撞体积;
- 你写的脚本:决定它每帧做什么。
这种“组合优于继承”的设计,导致你在 Unity 6 中几乎不需要创建很深的类继承结构,更多时候是在往物体身上一层层叠组件。
2.2 Scene、Prefab 与 Asset
Scene 就是一关游戏、一个地图或一个场景文件。一个项目可以由多个场景组成,运行时可以从一个场景切换到另一个场景。
Prefab 是“可以被反复实例化的物体模板”。你把一个做好的角色拖到 Project 窗口,就得到 Prefab。以后修改 Prefab,场景中所有实例可以一起更新。这是 Unity 项目能规模化开发的基础,但很多新手会跳过这个功能,导致每个场景复制一份配置,改起来极痛苦。
Asset 则是所有资源的统称,包括模型、贴图、音频、材质、Shader、脚本文件。Project 窗口里的一切,几乎都是 Asset。
2.3 Material 与 Shader 的分工
Material 是参数集合,Shader 是渲染算法。你可以把 Shader 理解成“如何把颜色和光照变成屏幕上像素的规则”,把 Material 理解成“套用这套规则时用的具体数值”。
在 Unity 6 中,新项目经常会使用 URP(Universal Render Pipeline)模板,此时默认 Shader 是 URP/Lit。你创建一个 Material,设置 Base Map(基础颜色贴图)、Smoothness(光滑度)、Metalness(金属度),本质就是在填 Shader 所需要的参数。
这句话很重要:物体发紫红色,往往是材质用了不兼容的 Shader;物体太黑,往往是光照没配置好,而不是材质坏了。
2.4 Unity 6 相对旧版本的关键变化
Unity 6 是 Unity 新一代 LTS 版本,更适合新项目长期维护。从基础操作看,它和 Unity 2022 LTS、Unity 2023 LTS 的工作流差异不大,但有几个地方值得注意:
- 构建入口从旧的 Build Settings 整合成了 Build Profiles,一套项目可以保存多套平台构建配置;
- TextMeshPro 已经是 UI 文本的主流方案,旧版 UnityEngine.UI.Text 只作为兼容存在;
- 3D 新项目更倾向 URP,而不是旧的 Built-in 管线。
如果你之前学过旧版 Unity,不需要推翻重学,只需要把“Build Profiles”“URP 材质”“TMP 文本”这三个概念对齐到新版即可。
下面用一张表快速对比几个核心概念:
| 概念 | 一句话解释 | 比喻 |
|---|---|---|
| GameObject | 场景中的物体实体 | 白纸上的空框 |
| Component | 挂在物体上的能力 | 空框里放的零件 |
| Scene | 一个可切换的关卡/场景 | 一张图纸 |
| Prefab | 可复用的物体模板 | 模具 |
| Material | 渲染参数集合 | 油漆配方 |
| Shader | 渲染颜色与光照的算法 | 上色的方式 |
3. 环境准备与前置条件
Unity 6 的安装并不复杂,但因为编辑器体积较大,建议留出至少 10GB 磁盘空间。下面按最稳妥的路径走一遍。
3.1 安装 Unity Hub
Unity Hub 是 Unity 版本管理工具,用来安装多个版本、管理许可证、创建项目。直接去 Unity 官网下载 Hub 安装包即可,Windows 和 macOS 都有对应版本。
3.2 通过 Hub 安装 Unity 6
打开 Unity Hub,在 Installs 页面选择 Unity 6 版本,点击 Install。建议勾选以下模块:
- Windows 上选择 Visual Studio,用于编辑 C# 脚本;
- 如果要发布 Android,需要勾选 Android Build Support 相关模块;
- 如果要发布 WebGL,需要勾选 WebGL Build Support。
不要一次性装一堆平台模块。Unity 编辑器加模块体积不小,装你真正用到的就够了。
3.3 激活许可证
Unity 官方通常为个人开发者提供可免费使用的许可证。在 Unity Hub 里登录账号,进入 Manage Licenses,选择对应许可证类型即可激活。这一步属于正规软件授权流程,如果公司内网受限,需要联系管理员做授权申请,不要使用任何非官方渠道。
3.4 创建第一个项目
打开 Unity Hub,点击 New Project,在模板列表中选择:
- 3D(Universal Render Pipeline)或者 3D,具体视安装版本而定。
建议新手用 URP 模板,因为它是 Unity 6 时代的主流渲染方案,材质、光照和后处理的工作流更现代化。
项目创建后,第一次打开编辑器会慢一些,这是正常的。进入后你会看到一个包含多个面板的窗口,这就是 Unity 6 的默认界面。
4. 核心流程拆解:从空场景到可运行程序
很多人学 Unity 6 时,最强的陌生感来自界面。我们先花一点时间把界面各区域的分工说明白,再进入完整流程。
4.1 看懂五个核心窗口
Unity 6 编辑器界面主要分五个区域:
- Hierarchy:当前场景里的物体清单,所有 GameObject 都在这里列出;
- Scene:可视化编辑场景用的视图,你在这里拖物体、摆位置;
- Game:运行时画面预览,点击 Play 后你可以在这里看到最终效果;
- Project:项目资源列表,类似文件管理器;
- Inspector:选中物体后,显示该物体所有组件和参数的属性面板。
这五个窗口就是 Unity 6 操作的“主场”。一次操作通常是这样:先在 Hierarchy 里选择物体,在 Scene 里调整它的位置,在 Inspector 里改参数,在 Project 里查看资源,在 Game 窗口验证运行效果。
右上角的 Layout 下拉菜单可以切换窗口布局,如果窗口被拖乱,可以在 Window > Layouts 选择 Two by Three 或者 Default 恢复。
4.2 完整操作链路
我们后面章节的示例,会围绕下面这条链路展开:
- 创建 Cube 作为场景物体;
- 创建两个材质,分别设置为红色和蓝色;
- 写一个旋转脚本,让 Cube 一直在转;
- 写一个 UI 控制器,点击按钮切换 Cube 的材质颜色;
- 用 TextMeshPro 显示当前状态;
- 通过 Build Profiles 打包成 Windows 程序。
这条链路覆盖了界面操作、组件使用、脚本编程、UI 交互和构建发布,是 Unity 6 入门最值得跑通的最小闭环。
在做具体操作之前,记得先养成一个习惯:改完场景或代码后,随时按 Ctrl + S 保存。Unity 6 不会自动保存你的场景,很多新手的“辛苦一小时,一个弹窗全白费”就是这样发生的。
5. 完整示例:一个旋转换色 UI 小 Demo
下面我们开始做一个完整小 Demo。目标很明确:一个持续旋转的 Cube,点击按钮后 Cube 在红蓝两种材质之间切换,屏幕上显示当前颜色。
5.1 搭建场景基础物体
在 Unity 6 中新建 3D 项目后,默认场景可能只有一个 Main Camera 和 Directional Light。
在 Hierarchy 里执行以下操作:
- 右键 Hierarchy,选择 3D Object > Cube,新建一个立方体;
- 选中 Cube,在 Inspector 中把 Position 设置为 (0, 1, 0),这样它不会和地面重叠;
- 在 Hierarchy 里右键,选择 Create Empty,命名为 GameManager。
GameManager 不需要任何网格渲染组件,它是专门用来挂脚本的“逻辑载体”。统一用空物体承载全局脚本,比把脚本挂在 Main Camera 上更清晰。
5.2 创建红蓝两种材质
在 Project 窗口里,右键选择 Create > Material,命名为 Material_Red,再重复一次创建 Material_Blue。
选中 Material_Red,在 Inspector 中:
- 如果项目是 URP,Shader 选择 Universal Render Pipeline/Lit;
- 打开 Base Map 旁边的颜色选择器,设置为红色;
- Material_Blue 同理,设置为蓝色。
默认材质如果被中途修改,后续场景和资源可能发生资源共享问题。这里特别说明:我们创建的这两个材质是独立资源,互相不影响,这是 Material 资源化带来的好处。
5.3 编写旋转脚本
Unity 6 的脚本语言是 C#。在 Project 窗口的 Assets 下新建文件夹 Scripts,右键 Scripts 文件夹,Create > C# Script,命名为 Rotator。
然后打开脚本文件,输入以下内容:
// 文件路径:Assets/Scripts/Rotator.cs using UnityEngine; public class Rotator : MonoBehaviour { [Tooltip("每秒旋转角度")] public float speed = 30f; void Update() { // Time.deltaTime 保证旋转速度与帧率无关 transform.Rotate(Vector3.up * speed * Time.deltaTime); } }脚本保存后,回到 Unity 6。注意 Unity 的脚本必须和文件名、类名一致,不能出现两份同名类。
返回编辑器,等待 Console 窗口出现编译完成提示。然后把 Rotator 脚本拖到 Hierarchy 里的 Cube 上,或者选中 Cube 后,在 Inspector 里点击 Add Component,搜索 Rotator 添加。
这样 Cube 就会在 Play 状态下持续旋转。
5.4 编写 UI 控制器脚本
继续在 Scripts 文件夹下新建 C# 脚本,命名为 UIController。
// 文件路径:Assets/Scripts/UIController.cs using UnityEngine; using UnityEngine.UI; using TMPro; public class UIController : MonoBehaviour { [Header("场景引用")] public Renderer targetRenderer; public Material redMaterial; public Material blueMaterial; public TextMeshProUGUI statusText; private bool isRed; public void SwitchColor() { isRed = !isRed; targetRenderer.material = isRed ? redMaterial : blueMaterial; statusText.text = isRed ? "当前颜色:红色" : "当前颜色:蓝色"; } }脚本中之所以使用 TextMeshProUGUI,是因为 Unity 6 的推荐 UI 文本是 TextMeshPro。它支持更清晰的字体渲染和更丰富的样式控制。
把 UIController 脚本挂到 Hierarchy 里的 GameManager 上。
5.5 搭建 UI 界面并绑定按钮事件
在 Hierarchy 中右键,选择 UI > Canvas,创建 UI 画布。再右键 Canvas,选择 UI > Button - TextMeshPro。
如果首次使用 TMP 时系统弹出 Import TMP Essentials 提示,点击 Import 导入即可,否则 TextMeshPro 文本无法正常显示。
选中 Button 子物体下的文本,修改内容为“切换颜色”。然后选中 Button,在 Inspector 里找到 Button 组件下的 OnClick() 列表:
- 点击加号添加一条事件;
- 将 GameManager 拖到 Object 字段;
- 在右侧函数下拉框里,选择 UIController > SwitchColor()。
接着在 Canvas 下再创建一个 Text - TextMeshPro,把它放在按钮下方,用来显示当前颜色状态。将这个文本组件拖到 GameManager 的 UIController 脚本组件的 statusText 字段上。
最后把 Cube 拖到 targetRenderer,把 Material_Red 和 Material_Blue 分别拖到 redMaterial 和 blueMaterial 字段。
到这里,交互逻辑就完成了。
5.6 编写一键构建脚本
场景内验证通过后,我们可以通过编辑器脚本实现自动化打包。在 Assets 下新建 Editor 文件夹,然后在其中创建 C# 脚本 BuildScript。
// 文件路径:Assets/Editor/BuildScript.cs using System.IO; using UnityEditor; using UnityEditor.SceneManagement; using UnityEngine; public static class BuildScript { [MenuItem("Tools/Build Windows Player")] public static void BuildWindowsPlayer() { string buildRoot = Path.Combine(Application.dataPath, "../Builds/Windows"); Directory.CreateDirectory(buildRoot); string exePath = Path.Combine(buildRoot, "Unity6Demo.exe"); string activeScene = EditorSceneManager.GetActiveScene().path; if (string.IsNullOrEmpty(activeScene)) { Debug.LogError("请先保存并打开需要打包的场景"); return; } BuildPlayerOptions options = new BuildPlayerOptions { scenes = new[] { activeScene }, locationPathName = exePath, target = BuildTarget.StandaloneWindows64, options = BuildOptions.None }; BuildPipeline.BuildPlayer(options); } }这段脚本做的事情是:
- 创建 Builds/Windows 目录;
- 读取当前打开的场景作为打包场景;
- 设置输出路径和构建平台;
- 直接调用 BuildPipeline 执行构建。
把脚本放在 Assets/Editor 目录下,非常重要。Editor 目录中的代码只在编辑器内运行,不会打进玩家版本。
脚本编译完成后,Unity 6 顶部菜单会出现一个 Tools 菜单,点击 Tools > Build Windows Player 即可开始构建。
6. 运行结果与效果验证
打包之前,先点击编辑器上方的 Play 按钮,进入运行模式。你会看到:
- Cube 在持续旋转;
- 场景中的 UI 按钮和文本正常显示;
- 点击“切换颜色”按钮后,Cube 在红蓝两色之间切换;
- 文本同步显示“当前颜色:红色”或“当前颜色:蓝色”。
如果这些表现都正常,说明场景交互链路已经通了。
接下来验证自动化构建。点击 Tools > Build Windows Player,等待 Console 窗口出现构建完成信息。如果没有报错,打开项目目录下的 Builds/Windows 文件夹,会看到 Unity6Demo.exe 以及一整套数据文件。
双击 exe 运行,程序会打开一个独立窗口,效果和编辑器里的 Game 窗口一致。你还可以关掉编辑器,单独运行这个 exe,确认它不依赖 Unity 6 编辑器即可运行。
如果点击按钮没反应,优先检查两处:一是 Hierarchy 中是否有 EventSystem,如果没有,右键创建 UI > Event System;二是 OnClick 事件是否真正绑定到了 GameManager 上,且 GameManager 上的 UIController 组件没有报错。
7. 常见问题与排查思路
Unity 6 的基础操作看似简单,但新手最容易在脚本编译、UI 事件和打包阶段卡住。下面列出五个最高频的问题:
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 脚本文件名和类名不一致导致编译错误 | 创建脚本后改了文件名但没改类名 | 查看 Console 中 Compilation Error 的具体报错 | 让文件名和类名保持一致 |
| 挂上脚本后物体没有任何行为 | 脚本没有挂到正确物体,或 Update 中没有逻辑 | 检查 Hierarchy 中的物体是否有对应组件 | 通过 Add Component 重新挂载 |
| Play 之后 UI 按钮点击无效 | 场景缺少 EventSystem | 检查 Hierarchy 中是否有 EventSystem | 创建 UI > Event System |
| TMP 文本不显示 | 没有导入 TMP Essentials 资源 | 查看 Console 提示 | 点击 Import TMP Essentials |
| 打包后材质紫红色 | 使用了与渲染管线不兼容的 Shader | 检查材质的 Shader 类型 | 在 URP 项目中改用 URP/Lit |
另外,如果你打包时发现 exe 路径没有生成,先确认当前场景是否已保存。未保存的新场景路径为空,BuildScript 会直接弹出一条红色错误日志。这个设计不是多余,而是在提醒你:Unity 的构建系统必须知道要打包哪个场景。
8. 最佳实践与工程建议
基础 Demo 跑通之后,接下来的重点不是继续做更多小例子,而是尽早建立好工程习惯。Unity 6 项目中,很多问题不是“不会操作”,而是“工程太乱,改不动”。
8.1 规划 Assets 目录结构
在新建项目后,第一时间在 Assets 下建立以下目录:
- Scenes:存放场景文件;
- Scripts:存放 C# 脚本;
- Materials:存放材质;
- Prefabs:存放预制体;
- UI:存放 UI 相关资源。
目录不用太复杂,但要固定下来。项目稍大一点之后,你的 Project 窗口是否有序,直接决定你能不能在十分钟内找到某个资源。
8.2 学会用 Prefab
不要在场景里复制粘贴一堆 Cube,然后分别改参数。应该把做好的物体拖到 Project 窗口生成 Prefab,再把它拖回场景。以后要调整这个物体的公共属性,只需修改 Prefab,所有场景实例会同步更新。
这是一个从“初学者”切换到“工程化思维”的重要分界点。
8.3 材质资源不要直接塞给 Renderer
在代码中切换材质时,如果频繁使用 renderer.material,Unity 会为物体创建材质实例,时间长了会产生大量资源浪费。基础功能用 renderer.material 没问题,但在循环中或批量处理时,要注意改用 sharedMaterial,或者在对的时机再实例化材质。
8.4 使用版本控制
Unity 项目非常适合使用 Git 管理,但有几个目录不应该提交:
# Unity 生成目录与缓存 [Ll]ibrary/ [Tt]emp/ [Oo]bj/ [Bb]uilds/ [Ll]ogs/ [Uu]ser[Ss]ettings/Library 和 Temp 是 Unity 自动生成的缓存,Obj 是编译产物,Builds 是构建输出。提交这些内容会让仓库迅速变得臃肿,且合并时很容易冲突。ProjectSettings 和 Assets 是核心内容,必须提交。
8.5 尽早使用 Build Profiles
Unity 6 的 Build Profiles 比旧版 Build Settings 更清晰。你可以为 Windows、WebGL、Android 分别保存不同的构建配置,包括场景列表、分辨率设置、压缩方式。建议每个目标平台都建一个独立 Profile,避免每次打包前临时改参数。
8.6 日志与验证
正式发布前,至少在 Windows 和 WebGL 各打包一次,确认目标环境下资源加载正常。Console 里的黄色警告不一定致命,但它往往意味着某种潜在问题,例如脚本挂在空物体上、材质引用丢失等。养成“看到 Warning 就顺手查明原因”的习惯,比熟练掌握一百个快捷键更重要。
9. 总结与后续学习方向
现在,你应该有能力从零开始完成一次完整的 Unity 6 项目闭环:创建物体、配置材质、编写 C# 脚本、搭建 UI、自动打包。这套流程平时看起来不起眼,但它是后续所有 Unity 学习的地基。
你已经理解的最重要一件事是:Unity 6 的操作不是菜单记忆,而是“场景中有物体,物体上有组件,组件由资源驱动,最后通过构建管线输出”。带着这个框架去学 PBR 材质、动画系统、物理系统、URP 后处理,都会比之前顺畅得多。
下一步建议按这个顺序继续深入:
- 先学 URP 光照和材质参数,把材质从“改颜色”提升到“控制粗糙度、金属度、法线贴图”;
- 再学 Input System,实现键盘、鼠标和游戏手柄输入;
- 然后学 UI Toolkit 或 uGUI 进阶布局,把界面从按钮文本框提升到完整交互面板;
- 最后再做一次多平台发布,体验 Android 或 WebGL 构建的差异。
如果你在实践本文示例时遇到了问题,优先查看 Console 窗口,它通常会给出具体脚本名称和行号。先解决编译错误,再排查逻辑错误,这是 Unity 6 入门阶段最实用、也最节省时间的排错顺序。
建议收藏这篇文章,动手做的时候随时回来对照。哪怕现在没有耐心直接操作,先跑完前面的环境安装,打开 Unity 6 看一眼界面,你的入门难度就已经降了一半。