下载 App
【开发日志 5|涌现:让鸟"自己飞起来"】
昨天 14:039 浏览综合
涌现是这次 GameJam 的主题,也是我做这款游戏的起因。前四篇讲了蛋、孵化和鸟舍,这一篇回到天上——鸟群本身。
boids 三条规则日志 1 里介绍过:分离、对齐、内聚。做鸟群编辑页时,我给自己定了一条原则:玩家编辑的不是"鸟群的走位",而是"每一种鸟的性格"。
群性来自现实。麻雀在城市公园里成群,苍鹭在湿地独来独往,猛禽单独巡飞——这是鸟类学的事实。所以模拟里每种鸟的感知半径、邻居数、转弯速度、扰动,都按鸟种固定,玩家碰不到;开放给玩家的只有分离/对齐/内聚三条滑杆(0-100),这是"有限度的操作空间":麻雀这类群居种,参数怎么调都还是一团密群;把群性压到最低的苍鹭,怎么调都是散的。
中途一度让玩家手动更换"外形",我很快撤销了——外形不只是剪影,速度、转弯、密度都绑在它身上。给麻雀配一副猛禽的外形,麻雀就不会聚集了,这违反麻雀的习性。涌现,得先尊重个体的规则。
技术上几件事:
- 模拟场由玩家的鸟群配置驱动:最多 10 个槽位、放鸟种和数量,总量上限 500 只;
- 每帧重建空间分区网格,每只鸟只在自己感知半径内查邻居,单帧开销不随总鸟数爆炸;
- 切页、编辑配置都不重置运动:世界按配置签名比对,内容没变就不重建,鸟继续飞它的;
- 活动范围随在场鸟数扩大,120 只铺满整个天空——鸟越多,天越大。
踩得最深的一个坑:40 只麻雀在低密度场里跑 90 秒,稳定分成 20/20 两群,永远不合并。调大感知半径完全无效——A/B 实验才定位到根因:内核只取最近 7 个同类,低密度时各子群互相看不见。最后给内核补了一项"同种全体质心"的全局凝聚(权重与局部凝聚同源、不随距离衰减)才解决。它不影响群性为 0 的猛禽——修复只作用于"本该成群的种"。
还做了个精简模式:深蓝黑底,所有鸟换成白色">"箭头,尺寸按体量对数插值压到 1.5 倍。看整片箭头瞬间转向的那一刻,是"涌现"这两个字最直观的注脚。












