Unity3D 游戏开发完整教程
第一部分:入门准备与基础概念
第1章:什么是游戏引擎?为什么选择Unity?
- 游戏引擎:你可以把它想象成一个“游戏开发工具箱”,它提供了创建游戏所需的一切核心功能,如渲染(画面)、物理(碰撞、重力)、音频、输入处理等,让你不必从零开始编写所有代码。
- 为什么选择Unity?
- 跨平台:一次开发,可发布到 PC (Windows, macOS)、移动端 (iOS, Android)、主机 (PlayStation, Xbox, Switch) 和 Web 等众多平台。
- 强大的社区与资源:拥有全球最大的开发者社区,你能轻松找到教程、插件、模型和解决方案。
- C# 编程语言:C# 是一门现代、强大且相对易学的语言,广泛应用于游戏开发。
- 可视化编辑器:拖拽式的编辑器让非程序员也能快速搭建游戏场景。
- 丰富的资产商店:可以购买或下载大量现成的资源(模型、材质、动画、插件等),极大加速开发进程。
第2章:安装与配置
- 下载Unity Hub:这是 Unity 的官方管理器,用于安装不同版本的 Unity 编辑器和管理项目。
- 安装Unity编辑器:通过 Unity Hub 安装一个 LTS (Long-Term Support) 版本,LTS 版本更稳定,适合商业项目,推荐新手安装最新的 LTS 版本(如 2025.3.x)。
- 安装必要的模块:在安装编辑器时,确保勾选了 “Build Support” 中你需要的平台模块,如
Windows、iOS、Android等。 - 选择代码编辑器:强烈推荐 Visual Studio (VS),在安装 Unity 时,它会提示你安装 VS for Unity,你也可以选择 Rider、VS Code 等。
第3章:初识Unity编辑器
启动 Unity 并创建一个新 3D 项目,你会看到一个复杂的界面,别怕,我们先来认识它的核心组成部分:

- Scene (场景视图):你游戏世界的“舞台”,在这里摆放、移动、旋转所有游戏对象,你可以从不同的视角(如透视图、正交视图)查看它。
- Game (游戏视图):玩家最终看到的画面,这个窗口显示的是你正在运行的游戏。
- Hierarchy (层级视图):显示当前场景中所有游戏对象的“家谱列表”,所有对象都以树状结构展示,方便管理。
- Project (项目视图):你的游戏项目的“文件管理器”,存放所有脚本、模型、贴图、音频等资源。
- Inspector (检查器视图):当前选中对象的“属性面板”,在这里你可以修改对象的组件属性,比如位置、旋转、颜色、脚本参数等。
- Toolbar (工具栏):位于视图顶部的快捷工具,包含移动、旋转、缩放、手型(平移镜头)、滚轮(缩放镜头)等常用操作。
小练习:
- 在 Hierarchy 中,创建一个 3D 立方体 (
GameObject > 3D Object > Cube)。 - 在 Scene 视图中,使用工具栏的移动工具来移动它。
- 选中立方体,在 Inspector 中,尝试修改它的
Transform组件下的Position、Rotation和Scale。
第二部分:核心编程语言 - C#
游戏开发离不开编程,Unity 使用 C# 作为其官方脚本语言。
第4章:C# 基础语法速成
你需要掌握以下核心概念:
- 变量:存储数据的容器。
int score = 0;(整数),float speed = 5.0f;(浮点数),string playerName = "Hero";(字符串)。 - 数据类型:
int,float,bool(布尔值, true/false),string等。 - 函数/方法:执行特定任务的代码块。
public void Move()。 - 类:创建自定义“蓝图”或“模板”,用于创建对象,你的所有脚本都是一个类。
Start()和Update()方法:void Start():在游戏开始的第一帧调用一次,适合做初始化工作。void Update():每一帧都会调用一次,适合处理需要持续更新的逻辑,如玩家移动、检测按键等。
if条件语句:根据条件执行不同的代码。for和while循环:重复执行某段代码。
小练习:
创建一个新脚本 PlayerController.cs,并将其附加到场景中的立方体上,然后编写以下代码:

using UnityEngine;
public class PlayerController : MonoBehaviour
{
public float moveSpeed = 5.0f;
void Start()
{
// 游戏开始时,打印一条消息
Debug.Log("玩家控制器已启动!");
}
void Update()
{
// 每一帧都检查是否按下了 W 键
if (Input.GetKey(KeyCode.W))
{
// 如果按下,向前移动
transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);
}
}
}
运行游戏,尝试用 W 键控制立方体前进。
第三部分:游戏核心要素
第5章:物理与碰撞
- 刚体:
Rigidbody组件,为对象添加物理属性,如重力、质量、速度,任何需要与物理世界交互的对象(如玩家、掉落的箱子)都需要添加它。 - 碰撞器:
Collider组件,定义对象的物理形状,用于检测与其他对象的碰撞,常见的有Box Collider(立方体)、Sphere Collider(球体)。 - 触发器:将碰撞器的
Is Trigger属性勾选,对象不会产生物理碰撞,但可以“感知”到其他物体进入或离开其范围,常用于拾取物品、进入区域等。
小练习:
- 创建一个平面 (
GameObject > 3D Object > Plane) 作为地面。 - 为你的立方体添加
Rigidbody组件。 - 创建一个球体,并将其
Sphere Collider的Is Trigger勾选。 - 编写一个新脚本
PickupItem.cs,附加到球体上:
using UnityEngine;
public class PickupItem : MonoBehaviour
{
void OnTriggerEnter(Collider other)
{
// 当有物体进入触发器时
if (other.CompareTag("Player")) // 假设玩家对象的 Tag 是 "Player"
{
Debug.Log("物品被拾取了!");
Destroy(gameObject); // 销毁自己(这个球体)
}
}
}
- 在 Hierarchy 中选中你的立方体,在 Inspector 顶部的
Tag下拉菜单中,选择Add Tag...,然后创建一个新标签Player,并把这个标签应用到立方体上。 - 运行游戏,让带刚体的立方体去触碰球体,观察控制台输出。
第6章:输入系统
Input类:Unity 提供的用于获取玩家输入的静态类。Input.GetKey():检测按键是否被按住。Input.GetKeyDown():检测按键是否在这一帧被按下。Input.GetAxis():获取轴的值,适用于游戏手柄或WASD/方向键。Input.GetAxis("Horizontal")会返回 -1 到 1 之间的值。
小练习:
修改 PlayerController.cs,实现用 WASD 或方向键控制移动:
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public float moveSpeed = 5.0f;
void Update()
{
float horizontalInput = Input.GetAxis("Horizontal"); // A/D 或 左/右方向键
float verticalInput = Input.GetAxis("Vertical"); // W/S 或 上/下方向键
// 创建一个移动向量
Vector3 moveDirection = new Vector3(horizontalInput, 0, verticalInput);
// 标准化向量,确保对角线移动速度不会更快
if (moveDirection != Vector3.zero)
{
moveDirection.Normalize();
transform.Translate(moveDirection * moveSpeed * Time.deltaTime);
}
}
}
第7章:UI (用户界面)
使用 Unity 的 UI (User Interface) 系统来创建 HUD、菜单、按钮等。

- 创建 Canvas:
GameObject > UI > Canvas,所有 UI 元素都必须放在 Canvas 下。 - 创建 Text - TextMeshPro:
GameObject > UI > Text - TextMeshPro,用于显示文本。 - 创建 Button:
GameObject > UI > Button。
小练习:
- 创建一个 Canvas。
- 在 Canvas 下创建一个 Text - TextMeshPro,命名为
ScoreText。 - 创建一个新脚本
ScoreManager.cs,并创建一个空对象GameManager,将脚本附加到它上。
using UnityEngine;
using TMPro; // 引入 TextMeshPro 命名空间
public class ScoreManager : MonoBehaviour
{
public static ScoreManager instance; // 单例模式,方便其他脚本访问
public TextMeshProUGUI scoreText;
private int score = 0;
void Awake()
{
// 单例模式实现
if (instance == null)
{
instance = this;
}
else
{
Destroy(gameObject);
}
}
void Start()
{
UpdateScoreText();
}
public void AddScore(int points)
{
score += points;
UpdateScoreText();
}
void UpdateScoreText()
{
scoreText.text = "Score: " + score.ToString();
}
}
- 在 Inspector 中,将
ScoreText拖拽到ScoreManager脚本的scoreText字段上。 - 修改
PickupItem.cs,当物品被拾取时,调用分数管理器。
// 在 PickupItem.cs 中
using UnityEngine;
public class PickupItem : MonoBehaviour
{
public int points = 10; // 每个物品的分值
void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player"))
{
Debug.Log("物品被拾取了!");
ScoreManager.instance.AddScore(points); // 调用分数管理器
Destroy(gameObject);
}
}
}
当你拾取球体时,分数应该会增加。
第四部分:项目实战 - 制作一个简单的 3D 收集游戏
第8章:项目规划
- 目标:控制一个角色在场景中移动,收集散落的宝石,并显示分数。
- 场景元素:
- 玩家(带
Rigidbody和Collider) - 地面
- 多个可收集的宝石(带
Collider和Is Trigger) - UI Canvas(显示分数)
- 玩家(带
第9章:整合与测试
- 创建玩家:使用一个胶囊体 (
Capsule) 作为玩家,添加Rigidbody和Capsule Collider,为其添加PlayerController和Tag: Player。 - 创建宝石:创建一些球体,调整颜色和大小,为它们添加
Sphere Collider并勾选Is Trigger,创建一个Gem.cs脚本,附加到所有宝石上,实现拾取逻辑和加分。 - 完善移动:在
PlayerController中,加入跳跃功能(检测Input.GetKeyDown(KeyCode.Space)并给Rigidbody添加一个向上的力)。 - 场景美化:添加天空盒 (
Window > Rendering > Environment)、光源 (GameObject > Light > Directional Light)。 - 测试:不断运行游戏,测试所有功能,修复 Bug。
第五部分:进阶与扩展
当你掌握了基础后,可以探索以下领域:
- 动画系统:学习使用
Animator控制角色行走、攻击等动画。 - 预制体:将配置好的游戏对象保存为可复用的模板。
- 场景管理:学习如何在不同场景(如主菜单、游戏场景、结束画面)之间切换。
- 对象池:优化性能,用于高效管理大量频繁创建和销毁的对象(如子弹、敌人)。
- 寻路系统:让 AI 敌人能够智能地在地图上移动。
- Shader Graph:通过可视化节点创建自定义着色器,实现酷炫的视觉效果。
第六部分:发布与部署
- 构建设置:
File > Build Settings,在这里选择目标平台,添加场景,然后点击Build按钮。 - 平台特定设置:每个平台(如 Android, iOS)都有其独特的设置,如分辨率、包名、权限等,需要仔细配置。
学习资源推荐
- 官方资源:
- Unity Learn:Unity 官方学习平台,有大量免费的、结构化的官方教程,从入门到精通。
- Unity User Manual:官方文档,最权威的参考资料。
- 视频教程:
- Brackeys (已停更,但仍是经典):B站有大量搬运,非常适合新手入门。
- Code Monkey深入,覆盖面广,适合有一定基础后学习。
- Sebastian Lague:以创意和高质量教程闻名,能激发你的灵感。
- B站/YouTube:搜索“Unity 教程”,有无数优秀的中文和英文创作者。
- 社区与问答:
- Unity Forums:官方论坛。
- Reddit (r/Unity3D, r/Unity2D):非常活跃的社区。
- Stack Overflow:专业的编程问答网站。
总结与建议
- 动手实践:看再多教程不如亲手写一个项目,从最简单的“移动方块”开始,逐步增加功能。
- 不要害怕犯错:调试是开发的核心技能,学会阅读错误信息,利用
Debug.Log()是你的好朋友。 - 保持耐心:游戏开发是一个复杂且漫长的过程,设定小目标,完成一个就庆祝一下。
- 从模仿开始:尝试复刻一些经典游戏的核心玩法,这是学习游戏设计原理的绝佳方式。
祝你学习愉快,早日开发出自己的梦想游戏!
