1 Star 17 Fork 3

SouthBegonia/UnityWorld

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

1987年Craig W.Reynolds发表一篇名为《鸟群、牧群、鱼群:分布式行为模式》的论文,描述了一种非常简单的、以面向对象思维模拟群体类行为的方法,称之为 Boids ,Boids 采用了三个核心的规则:

  • 排斥性:避免与群体内邻近个体发生碰撞
  • 同向性:趋向与邻近的个体采用相同的速度方向
  • 凝聚向心性:向邻近个体的平均位置靠近

由此我们采用Unity来实现算法并演示,演示结果:

制作思路

每个boid对象,每帧都有2个关键的表:与该boid邻近的boids的表及与该boid最近的boids的表。根据两个表求得一些确定该boid位置、方向、速度的因素(例如其他boids的平均速度,其他boids的平均位置,该boid与其他boid的平均距离等),根据所提出的三规则,设置各影响因素的权重比例,最终所有影响因素加和成为确定的、该boid下一帧的方向、位置、速度。

Boid模型的创建与配置

  1. 创建空对象取名Boid,再创建其空对象子物体,取名Fuselage
    • Fuselage->position(0,0,0),Rotation(7.5,0,0),Scale(0.5,0.5,2)
  2. 创建一个Cube作为Fuselage子物体,移除 Box Collider,并添加拖尾渲染器 TrailRenderer
    • Cube->position(0,0,0),Rotation(45,0,45),Scale(1,1,1)
    • Component->Effects->TrailRenderer,选择材质Defualt-Particle(Material),Time值0.5,End Witdth值0.25
  3. 复制Fuselage创建另一个名为Wing的组件添加到Boid,两个都属于Boid的子物体
  4. 修改主相机位置到顶视图大范围
  5. 将boid设为预制体,boid 模型制作完毕

脚本配置

  • BoidSpawner.cs 绑定于主相机
  • Boid.cs 绑定于预制体Boid上
  • 主相机检视面板中,设定 boidPrefab 变量为预制体 boid

参考

《游戏设计、原型与开发》 - Jeremy Gibson

马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C#
1
https://gitee.com/southbegonia/UnityWorld.git
git@gitee.com:southbegonia/UnityWorld.git
southbegonia
UnityWorld
UnityWorld
master

搜索帮助