今回はアセットの紹介をしていきます。
紹介するのはEnemy Vision - Patrol and Line of Sight。
ステルスゲームにおける敵の挙動を構築するアセットです。
お得なセール情報(終了しました)
現在アセットストアでは、プロトタイピング向けアセットのバンドルを発売中!
今回紹介する「Enemy Vision - Patrol and Line of Sight」もバンドルに含まれています。
金額に応じてアセットが異なりますが、オススメは全てのアセットが含まれた$21.99コースです。
通常の50%OFFセールで購入するよりも安く購入できるので、
気になるアセットがある場合は買っちゃいましょう!
どんなアセット?
ステルスゲーム向けのアセットです。
敵の視界、巡回機能システムを構築できます。
コンテンツ-
敵のビジョンコーン-ビジョンコーン
は障害物に適応します-
敵の行動:パトロール、アラート、チェイス-パトロール
:設定されたパス
に従って移動します-アラート:好奇心をそそられ、疑わしい場所に
歩きます
-チェイス:プレイヤーに向かって走ります-地面の高さ、敵は高台にいるときにのみあなたを見ることができます。
-オプションの2レベルのビジョンコーン(
近視と遠視)-近視範囲は、警告を受ける代わりにプレーヤーを即座に検出します。
-ノイズゾーン(プレイヤーがそれを踏むと、近くの敵に警告します)。
-ノイズを放出するために任意のオブジェクトおよび関数呼び出しに追加できるノイズソース。
-使用と構成が簡単
-2D および3Dのサポート-優れたパフォーマンスと最適化の設定
2D、3D両方で使えるアセットですが今回は3Dをメインに扱います。
すぐに動作確認ができるデモが用意されています。
開発環境
Unity2020.3.14f1
Enemy Vision - Patrol and Line of Sight ver2.02
インポートの確認
アセットインポート完了時はこんな感じです。
URPプロジェクトの場合
このアセットはSRP関係なく動きますがデモシーンはBuilt-inを想定したものになっています。
そのためURPで動かす場合はマテリアルのアップデートを行っておきましょう。
デモシーンの確認
Assets/IndieMarc/EnemyVision/Scenesにデモシーンが用意されています。
ステージ内を警官がパトロールしていて、視界に入ると追いかけてきます。
ノイズを発生させる赤いポイントがあり、そこを踏むと近くの敵が調べにやってくる機能もあります。
主要コンポーネント
このアセットを使いこなすうえで重要なコンポーネントを紹介します。
Enemyコンポーネント
Enemyの移動を管理するコンポーネントです。
移動速度、NavMeshAgentの有無、ステージの巡回機能もあります。
EnemyVisionコンポーネント
視界を管理するコンポーネントです。
視界の範囲、発見状態に移行するまでの時間、見失ってから追跡終了までの時間などを設定できます。
UnityEventが用意されているので、発見時や警戒時に何かさせたい時はコールバック関数を登録しましょう。
これに関してはEnemy Demoコンポーネントが参考になります。
VisionConeコンポーネント
視界を可視化して表示するコンポーネントです。
Assets/IndieMarc/EnemyVision/Prefabs/VisionConesに最初から用意されているので、直接触ることはないと思います。
VisionTargetコンポーネント
Playerにアタッチするコンポーネントです。
これがないとEnemyに検知されません。
実際に試してみる
3Dのシーンで実際に試してみます。
ステージとキャラクターの配置
壁用の適当な仕切りとしてCubeを、敵用のキャラクターとしてSDユニティちゃんを配置します。
NavMeshを生成するため壁、地面オブジェクトのNavigation Staticを有効にします
その後、NavMeshをBake。
これでステージ作りは完成です。
Enemyの設定
空のGameObjectを作成し名前を「Enemy」にします、SDユニティちゃんを子オブジェクトにします。
視点の位置用に空のGameObjectを作成し名前を「Eye」にします。
EyeはSDユニティちゃんの目元当たりに置いておきます。
Enemyオブジェクトには、Enemyコンポーネント、EnemyVisionコンポーネント、NavMeshAgentコンポーネント、EnemyDemoコンポーネントをアタッチします。
Enemyコンポーネント
デフォルトでは移動速度が速いのでSpeedを調節し、Use_pathfindを有効にします。
これが有効だとNavMeshAgentを使って移動します。
Enemy Visionコンポーネント
視界の範囲はデフォルトのまま、参照だけ設定します。
Eyeには先ほど作ったEyeオブジェクトをアサイン、
Vision_prefabにはAssets/IndieMarc/EnemyVision/Prefabs/VisionCones/VisionConeをアサインします。
Enemy Demoコンポーネント
Exclama_prefabにAssets/IndieMarc/EnemyVision/Prefabs/Others/Exclamationをアサイン
これでプレイヤー発見時に「!」マークが出ます
アニメーションの設定
AnimatorとAnimationはアセットで用意されているものをそのまま使います。
SDユニティちゃんのAnimatorにAssets/IndieMarc/EnemyVision/Animations/3D/Characterをアタッチします。
ただし、このアニメーションはHumanoidではなくGenericなのでAnimationTypeを変更します。
Assets/IndieMarc/EnemyVision/Modelsにある以下のオブジェクトのAnimationTypeをHumanoidにしてApply。
Playerの設定
PlayerにはVisionTargetコンポーネントをアタッチします。
これで完成です。
Playerが視界に入るとEnemyが追いかけてきます。
巡回機能を使う
せっかくなのでEnemyを巡回させてみます。
ステージ上の巡回させたい位置に空のGameObjectを作成します。
作成したGameObjectをEnemyコンポーネントのPatrol_pathにアサイン。
これで完成です。
明るいと見えにくいですが、シーンビュー上でも赤い線で巡回箇所が表示されます。
パトロールタイプ
巡回する時の動き方が3種類用意されています。
Rewind:最後のPatrol_pathまで移動したら、順番に引き返す
Loop:最後のPatrol_pathまで移動したら、最初の位置に戻り同じルートで巡回を開始する
Facing Only:移動はせず、Patrol_pathに登録した位置を向くだけ
まとめ
・Enemy Vision - Patrol and Line of Sightはステルスゲームにおける敵の挙動を構築するアセット
・2D、3D両方で活用できる
・視界と巡回機能が用意されている
いろいろさわってみてわかりましたがかなり丁寧に作られています。
ドキュメントは簡素で、コンポーネントやデモ用スクリプトがとてもわかりやすかったです。
他の方の解説記事
他のアセットの紹介記事はこちら↓
※本記事にはAssetStoreアフィリエイトリンクが含まれています。
他、間違っている箇所、わかりにくい所がありましたらコメントにお願いします。