自撮り
野球やサッカーなどのスタジアムで前の席の人が自撮りを始めたら写りこまないようにそっと身を屈める皆さんこんにちは。女性の方に多い気がしますが手にした食べ物と一緒に写りたがるのはどういう習性なのでしょうか?取り合えず試合そっちのけで自撮りに夢中になるのは辞めた方が良いと思います。
前回の続き
前回の記事でFlock Box dotsというアセットの概要を紹介しました。
ざっくりと説明すると鳥や魚等の群れの動きを作ることのできるアセットですが、前回はその概要と簡単なセットアップ例について記事にしました。
今回はFlock Box dotsで実装できる「群衆の動作」の詳細ついて説明したいと思います。
Behavior Settings
「群衆の動作」は群衆を構成する単体の動作を「Behavior Settings」という設定ファイルに設定することで構築します。
Behavior Settingsには凝集、分離、追跡等の群衆の動きを決定する個々の動作を定義することができます。
上の図はBehavior Settingsの例です。分離、追跡の各動作に対してそれぞれ重みづけ(weight)が設定され、個体の動作を定義しています。(上の場合は追従と分離が1対1の割合で動作する定義となっています)
Behavior Settingで設定できる動作は
上の図のメニューに表示されている全15種類。
このうち「ContainmentBehavior」は各BehaviorSettingsに自動的に追加される動作で、FlockBoxが定義するゾーン内にオブジェクトを封じ込める動作を定義しています。
それ以外の動作は必要に応じて追加、設定していく手順となります。
各種動作の説明
■Alignment:従順
周囲のエージェント(Steering Agentコンポーネントが設定されたオブジェクト)の平均的な順方向に向かって動作します。
■Arrival:到着
静止しているターゲットに向かって動作しますが、停止するために近づくときはブレーキ力を加えます。
Arraivalの使用例:ランダムに配置されたドットを目的地として設定
■Avoidance:回避
障害物を回避するように動作します。ただし、障害物はFlockBox配下のエージェント(Agentコンポーネントが設定されたオブジェクト)でなければなりません。
オレンジの半球が障害物、それを避けるように動作しています。
■ColliderAvoidance:コライダー回避
Colliderを避けるために操縦します。
回避よりも精度は劣りますが、複雑な環境ではより役立ちます。
Avoidanceと違い障害物はFlockBox配下のエージェントである必要はなく、Colliderを設定するだけで良いです。
■Cohesion:凝集
周囲のエージェントの中心点に向かって動作します。
■Flee:逃避
Cohesionとは逆に他のエージェントの中心点から離れていきます。
■Leader Follow:リーダー追従
Arraivalに似ていますが、複数のリーダーが存在する場合は、最も近いリーダーが選択されます。また、フォロワーは、リーダーの邪魔にならないように、リーダーの前のスペースからのステアリングを優先します。
これは前回の記事で実装例を説明しました。
■Pursuit:追跡
移動するターゲットで予想される迎撃ポイントに向かって動作します。
■Queue:整列
別のエージェントによってブロックされたときにブレーキ力を適用します。
混雑したエリアを通過しようとすると、群集が遅くなる効果を生み出します。
■Seek:探索
静止したターゲットに向かって動作します。
■Separation:分離
近くのエージェントからの距離を保つように動作します。
他のエージェントが近づくほど距離で重み付けされ、分離力が大きくなります。
■Wander:浮浪
ランダムな方向に操舵力を加えます。パーリンノイズで計算されます。
これらの各動作に対する設定例はプリセットとして用意されているので、魚群や鳥の群れをなどを背景として作りたい場合は、このプリセットをそのまま利用して作ることができます。
ゲームとして利用する
前述の説明のようにArraivalをいう動作を設定すると、それが設定されたオブジェトは特定のオブジェトに向かう動作を取ります。
現状ではターゲットに向かって一直線に移動していますが、これにColliderAvoidanceの動作をBehaviorSettingsに追加すると
障害物を避けてターゲットに移動するようになります。なのでこれを応用してターゲットを自分で操作できるようにし、追いかけるエージェントを複数個出現するように設定すると、
鬼ごっこのようなゲームが作れます。
ほかにも工夫すればゲームとして色々と利用できそうですね。