10万条鱼稳跑60fps:Unity ECS 群体行为模拟 Boids 完整指南
10万条鱼稳跑60fpsUnity ECS 群体行为模拟 Boids 完整指南【免费下载链接】EntityComponentSystemSamples项目地址: https://gitcode.com/GitHub_Trending/en/EntityComponentSystemSamples本文以官方Boids算法示例为例带你看懂Unity ECS结合DOTS如何把三条规则的群体行为模拟做成十万条鱼稳定60fps的鱼群。附3步跑通教程与参数调优速查表。为什么上千个个体一起动就掉帧Boids算法三条规则让独立个体涌现群体行为有个天生短板每个个体都要和所有其他个体比距离。O(n²)计算量随数量平方增长意味着100个个体要1万次比较1000个就要100万次。但用对数据结构后这百万次比较能压到几千次。空间哈希三层Job流水线10万鱼群的性能拆解先看ECS数据与逻辑分开存放鱼的位置、朝向、权重参数全部变成一维数据逻辑只按顺序读写数据。这意味着CPU能批量处理同构数据缓存命中率大幅提升。再是空间哈希把三维空间切成小立方格每条鱼只和同格邻居比距离——类似按门牌号查邻居不用挨家挨户敲门。格子是无边界的稀疏网格鱼不会被关进一个盒子里。var hash (int)math.hash(new int3(math.floor(localToWorld.Position * InverseBoidCellRadius)));这意味着邻居查询从O(n²)降到O(n)级计算量不再随实体数爆炸。最后是三层Job可并行的独立计算任务流水线①把每条鱼分进格子②汇总每格的平均朝向与中心位置③每条鱼根据聚合数据算出自己的移动方向。聚合数据正是分离、对齐、凝聚三条规则的来源平均朝向、平均位置、目标方向的加权和。像流水线一样三个工位在多核上并行Burst自动把C#代码优化成高性能指令的编译器再把每一步向量化。这就是10万个个体能稳定60fps的原因。完整逻辑在 BoidSystem.cs。 3步跑通Boids示例克隆仓库git clone https://gitcode.com/GitHub_Trending/en/EntityComponentSystemSamples用Unity Hub打开子项目EntitiesSamples等待DOTS包导入完成加载场景Assets/Boids/Boids.unity按Play鱼群绕鲨鱼的模拟立刻出现Play模式下你会看到蓝色鱼群、红色目标和一条鲨鱼。鱼群数量与出生位置由 EntitiesSamples/Assets/Boids/Scripts/BoidSchoolSpawnSystem.cs 控制随手把数量调大自己验证帧率上限。️ 5个参数调出真实鱼群场景里的BoidAuthoring组件允许你在Inspector里直接改数值不用碰代码var alignmentResult CurrentBoidVariant.AlignmentWeight * math.normalizesafe((alignment / neighborCount) - forward);每个权重都乘在一个方向向量上权重越大该行为越明显。参数作用推荐值SeparationWeight分离离邻居太近时躲开的强度0.5-1.5AlignmentWeight对齐同步邻居朝向的程度1.0-2.5TargetWeight追逐朝目标前进的强度0.3-2.0CellRadius空间格子大小越大邻居越多越快5-15ObstacleAversionDistance提前多少距离躲避障碍物5-30MoveSpeed游动速度单位/秒10-40最关键的是SeparationWeight鱼群看起来像一大坨就先调它看起来太散则调AlignmentWeight。调参时一次只动一个参数否则分不清效果是谁贡献的。参数定义见 BoidAuthoring.cs。 群体行为还能用在哪足球游戏球员跑位、策略游戏单位集群、人群疏散演练用的都是Boids。接下来你可以试状态机切换行为模式或区分领导者与跟随者角色。同一套规则能复用到无数群体AI场景。仓库入口git clone https://gitcode.com/GitHub_Trending/en/EntityComponentSystemSamples官方文档EntitiesSamples/Docs【免费下载链接】EntityComponentSystemSamples项目地址: https://gitcode.com/GitHub_Trending/en/EntityComponentSystemSamples创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考