Demo项目《蜂蜂大乱斗》技术复盘(Unity 6)

插件部分

这次做 Demo,使用了一些插件(含Unity内置),是平常不怎么用的,还没来得及深入学习,故此 Mark 住。

程序向:

  • DOTWeen
  • Cinemachine
  • InputSystem 中的 PlayerInput、PlayerInputManager
    • 对多设备接入提供了很好的工具架
  • Odin
    • 方便与策划合作
    • 规范 Inspector 面板,有 Read-Only 但是显示在 Inspector 面板等特性
    • 可以把放在各个 Obj 上面的脚本配置都配齐到一个面板上
  • QFramework(未用到)
    • 虽然本项目未用到,但是其他队伍程序用上了,提供一些基本的工具架,加快了开发速度,感觉可以学一些框架,可以带着去 Game Jam,框架+AI,开发速度无敌了👍

TA 向:

  • AmplifyShaderEditor:可视化着色器编辑器
  • DynamicBone:触角动骨
  • Unity-URP-Outline:角色描边效果
  • Bloom:后处理发光

AI Coding 部分

这次的代码量还是很大的,除了自己以往积累的一些基本框架(事件系统、Trace Log等),AI 工具写了很多我看得懂但不能立刻写出来的代码。Claude 4 、GPT 5、GPT 4.1 在这次 Demo 制作中发挥了很大的实力。

AI 的使用

本次的 AI 工具为: VSCode + Copilot Pro(学生包)

Claude 更擅长复杂、完整的需求——比如从零写了个 Multiplayer Audio Manager,支持根据玩家所在分屏位置(玩家 index)选择在左右声道播放音效。不过,Claude 会自我迭代很久,对于比较小的细节,或者比较简单的功能,Claude 反而力不从心、反复迭代把自己绕晕。当然也与我用 VSCode 有关系, 如果用 Cursor 的话可以写 .mdc 来调教。

GPT 发挥还是比较稳定,对于中小型需求都反应迅速且代码简洁。

Prompt 案例:面向复杂需求的操作

本来想在这里详细记录和分享一下 Prompt 怎么写的,无奈升级了 VSC 到最新版之后,貌似 Copilot 插件也更新了,查询不了 Chat History,只能看到标题。 因此只能简单分享一下这次 AI Coding 中 AI 帮助比较大的部分。

开发者应该不畏惧给 AI 喂复杂需求,相信 AI 能自我迭代,也相信自己会用 AI 写的需求代码,可以通过以下操作增加成功率:

  • 确保梯子稳定,就算断连了,也可以发送”请继续,刚才断网了“等 Prompt 让 AI 继续迭代
  • Prompt 需求分点,像列一个 TO-DO List 一样(现在的 Claude 聪明得倒是会自己整理 TODO List 了)
  • 写完框架、接口后,让 AI 写一个 README 文档,教你怎么使用,并且说明代码结构(直接可以上 Github 了)
  • 如果 AI 越迭代越错误,是时候开一个新的对话了…只要README写得好,你都可以让下一个 AI 来马上读懂这个框架,其实 README 和 Cursor 搞的 .mdc 原理真的很像。

以上这些操作在我让 AI 写音频脚本的时候都有使用,并且最后的音频系统用得也很顺手,甚至可以直接把脚本文件复制到另一个项目里复用。

技术复盘

时间管理器

需要的功能:

  • 正计时
  • 倒计时(可重复)
    • 同时支持回调
  • 返回时间(格式化时间)
  • 自动清理?
    • 不知道是否能做到

六边形地图生成

涉及到的技术:

  • 六边形地图坐标
  • 自计算 Obj 的宽度边长
  • 六边形地块的平顶与尖顶朝向

还需要优化的点:

  • 目前随机色,套了3层For循环:地砖随机色、根据边长生成一整层地板、根据层数生成整体地图

手柄震动

还需要优化的点:

  • 同一个手柄,无线和有线会识别成两个设备,导致同时控制了两个玩家
  • 无线手柄没有震动

DOTWeen:UI 动画、Obj 动画

这次做得好的点:

  • UI动画脚本解耦高,只要是个中心居中的UI都能挂(四周扩展的不行,根本变化不了坐标)
  • UI动画脚本提供缓入缓出的时间和方式
  • DOTWeen还能做 3D Obj 的动画,本次项目中制作了爆炸特效

还可以优化的点:

  • 3D Obj 的动画也能像UI动画一样解耦,变成可以直接挂载的脚本,更方便的添加生成动画
  • UI 动画脚本可以设置一下自动获取画布高度,来控制滑入滑出的位置。目前虽然最终位置没问题,但是会影响大滑入和滑出的时间,造成了不便预估的延迟。

道具卡功能

这次做得好的点:

  • 解耦
  • 在后面道具模型有变动的时候,很方便的在1分钟之内替换了资源

不好的点:

  • 道具的应用效果是写在 HUDManager 和 PlayerController(甚至PlayerManager,不过PM中的函数比较解耦),这样的话如果后期增加道具,增加道具资源很容易,但是要增加道具效果,只有不断地写代码
  • 按理说应该有一个Item Effect类来管理每个道具的效果,要作用到哪个玩家身上,PlayerController只留下一个应用效果的通用函数/接口,HUDManager也只留下一个函数,用来应用不同的Effect显示在屏幕上。
  • 写到这里,好像HUDManager没什么问题,道具的应用效果的画布肯定得寄存在这个脚本里是最方便的,不然实例化还要设置一下画布大小之类的,并且太解耦的话也不是很方便在Scene视图中查看

这一块还需要找人聊一聊,看看道具功能一般是怎么设计的

本次的道具功能结构:

  • 玩家类添加 Inventory
    • 提供列表
    • 加入道具、删除道具功能
  • Inventory UI
    • 仅负责刷新UI
  • Item Assets
    • 很方便的管理道具的各种图标、Prefab,直接替换就行
  • Item 类
    • 返回各种资源
  • ItemObj
    • 设置道具类型
    • 设置道具 MeshRenderer

游戏设计细节复盘

这里简单列举一下此前不曾注意到可以这样实现/设计的游戏细节。

  • 可以提前准备好的框架
    • 计时器
    • Log
    • 事件系统
    • 音频管理系统
    • 玩家管理类(如果是多人的话)
    • 玩家控制脚本
  • 手柄震动(在玩家碰撞的时候,可以给一下手柄震动,增强体验感)
    • 再次感谢AI的伟大,是路演前2小时,一句 Prompt 让 GPT-5 在 5 分钟内完成了这个功能
  • DOTWeen 可以做 3D 物体的缩放,效果也很好
  • 根据玩家分屏位置播放音频
    • 可以方便玩家知道是谁使用了道具。同时也让场景声音没那么混乱,否则 4 个玩家同屏,全部音效都是一样大声的出现就太吵了。
  • 六边形格子的地图生成
    • 需要使用到六边形专用的坐标,并且有专门研究此算法的帖子(见参考文献)
    • 地图的每层随机色配置可以用 SO 来存储,方便改配置,也避免在 Runtime 中调整不方便保存 Values(单组件的话倒是可以直接 Copy Component Values)
  • Input System 自带的 Player Input Manager 组件可以方便的实现多设备输入和分屏
    • 可以直接控制最大玩家数,根据玩家数自动设置 Camera 的 ViewPort
    • 目前与 Cinemachine 还有冲突,要实现视角控制分离,需要自己写脚本(参考文献也有)
  • 角色动画极大地增加了手感
    • 前摇动画,将玩家暂时定住
    • 冲刺拉伸动画,产生形变
  • Audio Manager 可以用 SO 将资源与代码分离
    • 之前在 B 站刷到过这种技术视频,这次总算是付诸实践了
  • 视线被遮挡,除了移动相机,可以写 Shader 让相机将一定距离内的物体透明
    • 《Sifu》就做了这个效果,个人分析,可能是因为动作游戏不方便随时转摄像机,所以隐藏了可以避免玩家被遮挡视野
  • 玩家位置、平台等空物体的位置在运行前显示
    • 挂载一个自定义脚本,在 Editor 中 DrawSphere就行
    • 这也是从毕设用的插件 Malber Animal 中学到的
  • 测试物体运行时自动隐藏
    • 挂载一个自定义脚本,在 Start 的时候自动隐藏物体
    • 如果写在Awake,一旦脚本被挂了就会执行,会导致测试物体取消不了自动隐藏

参考文献

本次 Demo 程序部分参考了以下教程,都是比较好、比较有用的教程才被记录了下来


标题:Demo项目《蜂蜂大乱斗》技术复盘(Unity 6)
作者:LeonYew
日期:2025-08-16