第三章

引擎与场景搭建:搭出“云间峡谷”

第二层 · 场景/预制体/资源管线 小陈用 Unity 搭出第一张对战地图

一、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——英雄是'站桩'的。下一章,我们给这个静止的世界注入'生命':渲染与动画。让英雄真正'走'起来。"

✌ 语言