最近Unityをはじめたので、いい感じに動くものを作りたいと思って、Boidsをシミュレーションするものを作ってみました。
Boidsとは
コンピュータ上の鳥オブジェクトに以下の三つの動作規則を与え、多数を同時に動かして群れの振る舞いをシミュレーションする。
分離(Separation)
鳥オブジェクトが他の鳥オブジェクトとぶつからないように距離をとる。
整列(Alignment)
鳥オブジェクトが他の鳥オブジェクトと概ね同じ方向に飛ぶように速度と方向を合わせる。
結合(Cohesion)
鳥オブジェクトが他の鳥オブジェクトが集まっている群れの中心方向へ向かうように方向を変える。
参考文献
課題と改善
まず、基本のルール通りにコードを書いたのですが結構動きが単調になってしまってなんか、いい感じゃない。(ただ群の塊がいろんな方向に動くだけになってしまう。)
なので、ルールを追加したり、数値を利用して、もっといい動きをするBoidsを作れないか試してみました。
実際に行ったこと
1. 結合のルールの変更
他の鳥オブジェクトと結合するか、しないかを際の、鳥オブジェクト間の距離に応じて決めるようにした。
そうすることで、群が複数できるようになり、また距離によっては群の結合が行われて複雑性が増した気がすする。
2. 整列のルールの変更
群の中心ではなく、群の中心から、一番離れた鳥オブジェクトをリーダーとして、それに向かうように変更を加てみました。場面によりリーダーが代わり、より縦横無尽に場面を行き来するようになりました。
3. グループの鳥オブジェクトの数を利用する
群が大きいほど、色が濃くなるようにして、それぞれの群が可視化できやすいようにしてみた。(ここはまだ改善の余地がありそう)
実際に作ったもの
今後の課題
まだまだ、色々ルールの追加で面白くはなりそうな気がするので、値とかうまく使い回せるようにしたい。
あとUnity、C#のお作法がまだしっかりとよくわかってないので勉強したいです。
コードで変なところとかあればぜひ教えてください!