今回はアセットの紹介をしていきます。
紹介するのはFish School Bundle。
魚の動きをシミュレートしコントロールするアセットです。
最近Subnauticaという海洋サバイバルゲームにハマっていまして、
丁度このアセットを持っていたのもあり記事にしてみました。
どんなアセット?
魚の群れをコントロールするアセットです。
背景素材や水中シーンの構築にぴったりです。
Amberjack Fish School for Unity
個別のアセットで売られているものをがセットになっています。
個別に買うと80ドル以上しますが、このバンドルなら半額以下で買えちゃいます。
さらにさらにタツノオトシゴもボーナスとしてついてきます。
セール対象の頻度としてはBird Flock Bundleほど多くはないようです。
Bird Flock Bundleについてはこちら
用語解説
最初に、このアセットを使う上で覚えておいたほうがいい用語をまとめました。
・WayPoint
鳥が飛行する際に目印にする目的地を指します。ここに向かって鳥は飛びます。
・School
群れのことを指します。
開発環境
Unity2019.3.12f1
Fish School Bundle ver1.3.3
この記事ではDolphinsを使用します。
サンプルシーンの確認
アセットインポート完了時はこんな感じです。
DolphinsやAmberjackなど魚の種類ごとにフォルダが分かれています。
このあたりはBirdと同じですね。
魚ごとにサンプルシーンが用意されています。
「Dolphins Demo SCN Avoidance」 シーン
水中をイルカが遊泳するシーンです。
遊泳しない確認用の3Dモデルも設置されています。
Sceneビューだとこんな感じ
魚たちは群れを作り青枠(WayPoint)を目指して飛行します。
青枠は水色枠内にランダムに生成されます。時間経過で再生成されます。
主要コンポーネント
このアセットを使いこなすうえで重要なコンポーネントを紹介します。
School Controller
魚の群れをコントロールするコンポーネントです。
Bird Flock BundleでいうところのFlock Controllerに当たります。
インスペクター用のエディタースクリプトが用意されているので、
表示されているパラメーター名とスクリプト内部の変数名が一致しないことに注意。
魚はシーン開始時に生成されます。
Frame Skipping
フレーム更新の頻度をどの程度スキップするか。(60fpsでは3~4、30 fpsでは2~3)
この値が小さいほど頻繁に更新されるようになります。逆に大きいとカクカクになります。
Fish Prefab
魚のプレハブを設定します。
Grouping
魚を生成時にグループ分けをする機能です。
通常時ではヒエラルキービューのルートに魚が大量に生成されます。
これだとちょっと見づらいなぁと思った時にこの機能を使いましょう。
Group To Schoolにチェックを入れることで、School Controllerがアタッチされたオブジェクトの子オブジェクトとして生成します。
折りたたむことで各段に見やすくなります。
Group to New GameObjectの場合は空のゲームオブジェクトを生成し、そこにグルーピングします。
Bubbles
魚が泳ぐ時に出る泡エフェクトに関する設定です。
泡の出る頻度などを変更できますが、この設定はランタイムで反映されないので注意。
Roaming Area
WayPointを作成する範囲を設定します。(水色の枠)
それぞれのパラメータはx,y,z軸になっていて、この範囲内にWayPointを作成します。
このパラメータが全て0の場合WayPointは作成されません。
Size of the flock
Bird Amoutは魚の総数。
School Width, Depth, Heightは魚を生成する範囲&WayPointの大きさです。上図の青枠。
Start Position Offsetは生成範囲のオフセット。
Speed and Movement
魚が泳ぐ速度などの設定できます。
Turn Speed
魚の回転速度(方向転換時)を設定できます。
Random Fish Size
設定したプレハブの3Dモデルの大きさを設定します。
逆に言うと、プレハブ側のスケールを上書きするので大きさを変えたい場合はここの数値を調整しましょう。
Fish Random Animation Speeds
アニメーション速度を設定できます。
Animation
鳥が再生するアニメーションの設定。
AnimationClip名とアニメーションの再生速度が設定できます。
Obstacle Avoidance
魚が障害物を回避する時の設定。
障害物のコライダーのレイヤー名やどの程度距離をとって回避、停止するかなど。
実際に試してみる
School Controllerの配置
School Controllerをアタッチしたオブジェクトをシーン内に追加しましょう。
といっても、すでにプレハブが用意されているのでこれをシーン内に追加するだけです。
シーンに追加したら、上記コンポーネントのパラメーターを調整するだけ。
ゲームを実行すると魚が生成されます。
海に置いてみる
せっかくなので海を作って配置してみましょう。
今回は海アセットでお馴染みAQUAS 2020を使います。
AQUASの使い方についてはこちらなど。
当然ですが、Area Sizeが海面の上にでないよう注意してください。
この海はデモシーンにおいてある海をそのまま使っています。
ただプレハブを配置するだけでここまで見栄えがよくなりました。
その他
ギズモが荒ぶる場合
シーンビューでSchool Controllerがアタッチされているオブジェクトのギズモが荒ぶることがあります。
オブジェクトの中心がCenterの場合この現象が起きます。
Pivotにしておきましょう。
サンビームエフェクト
このアセットには、水面から光が降り注いでいるようなエフェクトがおまけとしてついてきます。
まとめ
・Fish School Bundleは魚の群れをシミュレーションできるアセット
・プレハブをシーン内に置くだけで魚の群れを出現させることができる
・魚の行動範囲などノーコーディングで調整できる
ただしBird Flock Bundleに比べ使えるシーンが限定されることに注意。
ゲームの水中ステージとかなら需要あるのかも。
また、バンドルとはいえ魚の種類は少ないので本格的な海を舞台にしたゲームにはちょっと厳しいかも。
別途モデルを用意しておきましょう。
実際に使ってみて感じたことですが、処理負荷が大きいように感じました。
AQUASと一緒に使っているGIFを上に載せていますが、1100匹表示するのにドローコールが10000を超えています。(SetPass callsの方が重要なのかしら)
もしかしたらコツがあるのかも。
他のアセットの紹介記事はこちら↓
そういえばAQUASをきちんと使ったことがないので近いうちにまとめたい。
他間違っている箇所、わかりにくい所がありましたらコメントにお願いします。