Raspberlyのブログ

Raspberlyのブログ

Unityネタをメインとした技術系ブログです。にゃんこ大戦争や日常なども。そろそろブログタイトル決めたい

【アセット紹介】Fish School Bundle【Unity】

今回はアセットの紹介をしていきます。
紹介するのはFish School Bundle
魚の動きをシミュレートしコントロールするアセットです。

f:id:Raspberly:20200517230444p:plain

最近Subnauticaという海洋サバイバルゲームにハマっていまして、
丁度このアセットを持っていたのもあり記事にしてみました。

 

 

 

どんなアセット?

魚の群れをコントロールするアセットです。
背景素材や水中シーンの構築にぴったりです。


Amberjack Fish School for Unity


個別のアセットで売られているものをがセットになっています。

個別に買うと80ドル以上しますが、このバンドルなら半額以下で買えちゃいます。
さらにさらにタツノオトシゴもボーナスとしてついてきます。
セール対象の頻度としてはBird Flock Bundleほど多くはないようです。


Bird Flock Bundleについてはこちら

raspberly.hateblo.jp

 

用語解説

最初に、このアセットを使う上で覚えておいたほうがいい用語をまとめました。

WayPoint
鳥が飛行する際に目印にする目的地を指します。ここに向かって鳥は飛びます。

School
群れのことを指します。

 

 

 

開発環境

Unity2019.3.12f1

Fish School Bundle ver1.3.3

 

この記事ではDolphinsを使用します。

 

 

 

サンプルシーンの確認

アセットインポート完了時はこんな感じです。

f:id:Raspberly:20200531224107p:plain

DolphinsやAmberjackなど魚の種類ごとにフォルダが分かれています。
このあたりはBirdと同じですね。

 

魚ごとにサンプルシーンが用意されています。

f:id:Raspberly:20200531224016p:plain

 

Dolphins Demo SCN Avoidance」 シーン

水中をイルカが遊泳するシーンです。

f:id:Raspberly:20200531230711g:plain

遊泳しない確認用の3Dモデルも設置されています。

f:id:Raspberly:20200531225837p:plain

 

Sceneビューだとこんな感じ

f:id:Raspberly:20200531231406g:plain

魚たちは群れを作り青枠(WayPoint)を目指して飛行します。
青枠は水色枠内にランダムに生成されます。時間経過で再生成されます。

 

 

 

 

主要コンポーネント

このアセットを使いこなすうえで重要なコンポーネントを紹介します。

School Controller

魚の群れをコントロールするコンポーネントです。
Bird Flock BundleでいうところのFlock Controllerに当たります。
インスペクター用のエディタースクリプトが用意されているので、
表示されているパラメーター名とスクリプト内部の変数名が一致しないことに注意。

 

魚はシーン開始時に生成されます。

f:id:Raspberly:20200531232333p:plain

Frame Skipping

フレーム更新の頻度をどの程度スキップするか。(60fpsでは3~4、30 fpsでは2~3)
この値が小さいほど頻繁に更新されるようになります。逆に大きいとカクカクになります。

Fish Prefab

魚のプレハブを設定します。

 

Grouping

魚を生成時にグループ分けをする機能です。
通常時ではヒエラルキービューのルートに魚が大量に生成されます。
これだとちょっと見づらいなぁと思った時にこの機能を使いましょう。

f:id:Raspberly:20200531233433p:plain

 

Group To Schoolにチェックを入れることで、School Controllerがアタッチされたオブジェクトの子オブジェクトとして生成します。
折りたたむことで各段に見やすくなります。

f:id:Raspberly:20200531233732p:plain

f:id:Raspberly:20200531233640p:plain

Group to New GameObjectの場合は空のゲームオブジェクトを生成し、そこにグルーピングします。

 

Bubbles

魚が泳ぐ時に出る泡エフェクトに関する設定です。
泡の出る頻度などを変更できますが、この設定はランタイムで反映されないので注意。

f:id:Raspberly:20200531235245g:plain

 

Roaming Area

WayPointを作成する範囲を設定します。(水色の枠)
それぞれのパラメータはx,y,z軸になっていて、この範囲内にWayPointを作成します
このパラメータが全て0の場合WayPointは作成されません

f:id:Raspberly:20200531235832p:plain

 

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をアタッチしたオブジェクトをシーン内に追加しましょう。
といっても、すでにプレハブが用意されているのでこれをシーン内に追加するだけです。

f:id:Raspberly:20200601001203p:plain

シーンに追加したら、上記コンポーネントのパラメーターを調整するだけ。
ゲームを実行すると魚が生成されます。

f:id:Raspberly:20200601003954p:plain

f:id:Raspberly:20200601005643g:plain

 

 

海に置いてみる

せっかくなので海を作って配置してみましょう。
今回は海アセットでお馴染みAQUAS 2020を使います。

AQUASの使い方についてはこちらなど。

www.asset-sale.net

 

 

当然ですが、Area Sizeが海面の上にでないよう注意してください。
この海はデモシーンにおいてある海をそのまま使っています。

f:id:Raspberly:20200601011817p:plain

 ただプレハブを配置するだけでここまで見栄えがよくなりました。

f:id:Raspberly:20200601011829g:plain

 

 

 

 

その他

ギズモが荒ぶる場合

シーンビューでSchool Controllerがアタッチされているオブジェクトのギズモが荒ぶることがあります。

f:id:Raspberly:20200531221316g:plain

オブジェクトの中心がCenterの場合この現象が起きます
Pivotにしておきましょう。

f:id:Raspberly:20200531221255p:plain

 

サンビームエフェクト

このアセットには、水面から光が降り注いでいるようなエフェクトがおまけとしてついてきます。

f:id:Raspberly:20200531235548g:plain



 

 

 

 

 

まとめ

・Fish School Bundleは魚の群れをシミュレーションできるアセット
・プレハブをシーン内に置くだけで魚の群れを出現させることができる
・魚の行動範囲などノーコーディングで調整できる

 

ただしBird Flock Bundleに比べ使えるシーンが限定されることに注意。
ゲームの水中ステージとかなら需要あるのかも。
また、バンドルとはいえ魚の種類は少ないので本格的な海を舞台にしたゲームにはちょっと厳しいかも。
別途モデルを用意しておきましょう。

 

 

実際に使ってみて感じたことですが、処理負荷が大きいように感じました。
AQUASと一緒に使っているGIFを上に載せていますが、1100匹表示するのにドローコールが10000を超えています。(SetPass callsの方が重要なのかしら)
もしかしたらコツがあるのかも。

f:id:Raspberly:20200601014004p:plain

 

 

他のアセットの紹介記事はこちら↓

raspberly.hateblo.jp

そういえばAQUASをきちんと使ったことがないので近いうちにまとめたい。

 

 

 

 

 

 

 

他間違っている箇所、わかりにくい所がありましたらコメントにお願いします。