一、Unity 的三件套:场景、游戏对象、组件
"第二章讲完了循环,现在咱们动手搭场景。"老周打开 Unity,"Unity 里三个最核心的概念,必须先搞懂:场景(Scene)、游戏对象(GameObject)、组件(Component)。"
Unity 三件套:
场景(Scene)= 游戏世界的一个"关卡/地图"
云间峡谷就是一个场景
切换场景 = 换地图(如从大厅进入对战)
游戏对象(GameObject)= 场景里的"东西"
英雄、小兵、防御塔、地面、相机……全是 GameObject
一个空 GameObject 本身什么都没有(只有名字和 Transform)
组件(Component)= 给 GameObject 加"能力"的零件
Transform(位置/旋转/缩放)——每个对象都有
SpriteRenderer(显示图片)
Rigidbody(物理)
AudioSource(声音)
自定义脚本(你的游戏逻辑)
┌───────────────────────────────┐
│ 游戏对象:英雄·李白 │
│ ├── Transform(位置/朝向) │
│ ├── SpriteRenderer(立绘) │
│ ├── Animator(动画) │
│ ├── Rigidbody2D(物理) │
│ └── HeroController(你的脚本) │
└───────────────────────────────┘
"对象是容器,组件是能力" —— 组件式架构
"组件式架构(Component-based)是现代引擎的核心思想——想给英雄加'会飞'的能力?加一个 Fly 组件;想加'会掉血'?加一个 Health 组件。用'拼积木'代替'写死继承',复用性极强。"
二、场景编辑器:游戏世界的"积木桌"
"Unity 的场景编辑器(Scene Editor)就是你的'积木桌'。"老周演示:
场景编辑器布局:
┌────────────┬─────────────────┐
│ Hierarchy │ Scene 视图 │
│ (层级列表) │ (可视化编辑) │
│ 场景 │ │
│ ├ 地面 │ ○ 英雄 │
│ ├ 英雄 │ ╭──┐ │
│ ├ 小兵 │ │防御塔│ │
│ └ 相机 │ ╰──┘ │
├────────────┴─────────────────┤
│ Inspector(属性面板) │
│ 选中对象 → 看/改它的组件 │
│ Game 视图(运行预览) │
└──────────────────────────────┘
常用操作:
右键 → 创建 GameObject(空对象/图片/UI)
拖拽资源到场景 → 放进去
选中对象 → Inspector 调属性
点 Play → 运行预览(游戏循环开始跑!)
"场景编辑器让'搭游戏'变成了'可视化拼装'——不用写代码也能先搭出世界的样子。美术、策划、程序都能在同一个场景里协作。"
三、预制体(Prefab):游戏对象的"模板"
"峡谷里要放 10 个小兵,难道一个个搭?"老周说,"不——用预制体(Prefab)。"
预制体(Prefab):
一个"游戏对象的模板"
做一次,到处复制,改一处,全部更新
流程:
1. 搭好一个"小兵"(Sprite + 脚本 + 动画)
2. 拖到 Assets 里 → 变成预制体 Prefab
3. 往场景里拖 10 次 → 10 个小兵(共享同一模板)
4. 改预制体 → 所有小兵一起变
预制体 vs 普通对象:
普通对象:场景独一份
预制体:模板,可批量实例化(运行时也能动态创建!)
MOBA 里的预制体:
英雄预制体(不同英雄 = 不同预制体)
小兵预制体(近战兵/远程兵/炮兵)
技能特效预制体
野怪预制体
# 运行时动态创建(伪代码)
def spawn_minion(position, team):
# 从预制体实例化一个小兵
minion = Instantiate(minion_prefab, position)
minion.GetComponent<MinionAI>().team = team
minions_list.append(minion)
"预制体 = 批量生产的模具——MOBA 里每秒可能生成好几个小兵,全靠预制体实例化。'做模板、批量造'是游戏开发的重要思维。"
四、资源管线:图片、音频、动画怎么进游戏
"游戏需要的素材(图片、声音、动画)怎么管理?靠资源管线(Asset Pipeline)。"老周说:
资源管线(Asset Pipeline):
美术做图(PNG/PSD) ──┐
音频做音(MP3/WAV) ──┼──→ 导入 Unity → 处理优化 → 打包 → 进游戏
模型做模(FBX) ──┘
Unity 资源管理:
Assets 文件夹:所有源资源
导入设置:图片压不压缩?音频怎么采样?纹理要不要 mipmap
打包(Build):把资源打包成 APK/IPA
资源命名规范(团队协作关键):
英雄立绘:hero_limeng_stand.png
技能图标:skill_1_icon.png
音效:sfx_attack_01.wav
→ 统一命名,不然资源会乱成粥
资源加载方式(第八章细讲):
直接引用(拖进 Inspector)
动态加载(运行时按需加载)
热更新(服务器下发新资源)
"资源管线是游戏团队的美术/音频/程序协作的通道——命名规范、导入设置、打包流程,全是细节活,但做不好整个项目都会卡在'资源进不了游戏'上。"
五、相机:玩家的"眼睛"
"场景搭好了,还有一样东西必须有——相机(Camera),它是玩家的眼睛。"老周说:
相机(Camera):
决定"玩家看到什么"
2D 游戏相机要点:
- 跟随玩家(相机跟着英雄走)
- 视口范围(看到多大区域)
- 背景色/背景层
MOBA 的相机(王者荣耀是 3/4 视角,我们简化成 2D):
相机跟随英雄(或跟随屏幕中心)
锁定在峡谷范围内(别让相机飞出地图)
2D 相机跟随(伪代码):
def update():
camera.position.x = hero.position.x
camera.position.y = hero.position.y
# 限制在峡谷边界内
camera.position.x = clamp(camera.position.x, map_min_x, map_max_x)
UI 特殊:UI 不跟随相机(永远在屏幕上固定位置)
→ 用"屏幕空间"(Canvas),和世界空间分开
"没有相机的场景 = 盲人摸象——相机定义了'玩家的视野'。MOBA 里相机跟随、镜头缩放、战争迷雾,都是相机系统的玩法。"
六、章末:老周的第二章总结
第二层:引擎与场景搭建
├── Unity 三件套:场景/游戏对象/组件(对象是容器,组件是能力)
├── 组件式架构:拼积木代替写死继承(复用性)
├── 场景编辑器:可视化搭世界(Hierarchy/Inspector/Game)
├── 预制体:模板批量生产(做一次,到处造)
├── 资源管线:素材导入→优化→打包(命名规范!)
├── 相机:玩家的眼睛(跟随、视口、边界)
└── 场景 = 关卡 = 地图(MOBA 的峡谷就是一个场景)
下一章预告:
峡谷搭好了,英雄放进去了——但他是一张"静止的图片"!
怎么让他走起来、打起来、技能甩起来?
—— 渲染与动画:精灵、帧动画、动画状态机。
"小陈,'云间峡谷'搭起来了:有地面、有防御塔、有小兵、有英雄,还有相机跟着转。"老周满意地点点头,"但你现在按下 Play——英雄是'站桩'的。下一章,我们给这个静止的世界注入'生命':渲染与动画。让英雄真正'走'起来。"