SwarmCutter

十万单位同屏割草 Demo — Burst 并行物理 · 单 DrawCall 渲染
UnityC#DOTSBurstJob SystemUnity.MathematicsGPU InstancingHLSL

一个”吸血鬼幸存者”式的俯视角割草 Demo,同一时刻 10 万个敌人追踪玩家、互相推开、绕开障碍。所有物理模拟跑在 Burst 编译的并行 Job 里,渲染只用 1 次 DrawCall,全程零 GC 分配。

这个项目的目标不是做游戏,而是做技术验证:不引入 ECS/Entities 的前提下,纯 Jobs + Burst + 间接实例化渲染,能不能撑起十万单位?答案是能。

游戏 demo 下载地址:https://github.com/Wadu76/VS_demo/releases/tag/v1.0.0

内容

每帧数据流

Update:
  AssignCellJob      每个存活单位算格子 key(空间哈希)
  RadixSortPassJob×4 按 key 基数排序(乒乓缓冲)
  CellStartJob       并行二分 → 每格 [start, end) 区间
  SeparationJob      3×3 邻格斥力累加
  EnemyMovementJob   追踪 + 斥力 + 抖动 + 障碍推出 + 死亡缩小回收
  AttackJob(按间隔)  扇形内单位标记死亡
  刷新              从空闲池取下标,场地边缘激活
LateUpdate:
  PushPlayerOutOfObstacles → GraphicsBuffer.SetData → DrawMeshInstancedIndirect

我与 AI 的分工

这个项目是我和 AI 协作完成的,分工上我负责”想清楚要做什么、判断能不能做”,AI 负责”把想法变成能跑的代码”。整个过程是我不断提出实现设想 → 逐步 prompt 迭代 → 验收效果 → 调参或回退。

我负责的部分(技术方案与技术路线)

AI 负责的部分(编码落地与调试)

这套分工的实质:我提供的是架构判断与算法选型,AI 提供的是编码产能与调试效率。其中”哪些该做、哪些不该做”(比如双缓冲不做、无限地图回退)属于我的决策,并在文档里明确区分了「已实现」与「设想但未实现」,不含糊其辞。

性能与瓶颈

技术栈

Unity 2022.3 LTS · C# · Job System · Burst · Unity.Collections(NativeArray / NativeQueue)· Unity.Mathematics · GraphicsBuffer · DrawMeshInstancedIndirect · 自定义 GPU Instancing Shader(HLSL)· Unity Editor 脚本

源码与完整技术拆解:https://github.com/Wadu76/VS_demo