今回はアセットの紹介をしていきます。
紹介するのはSensor Toolkit。
視界を簡単に作ることができるセンサーアセットです。
お得なセール情報
現在アセットストアでは、サマーセールが開催中!
7週間にわたってテーマ別にセール対象アセットが変わります!
今週のテーマは3Dゲーム開発向けアセットです。
詳しくは↓のバナーからどうぞ!
今回紹介する「Sensor Toolkit」もセール対象です!
セールのスケジュール
3週目の終了時間は日本時間で7月13日15:59までです。
- お得なセール情報
- どんなアセット?
- 開発環境
- インポートの確認
- 主要コンポーネント
- RangeSensor
- RaySensor
- SteeringRig
- Trigger Sensor
- 実際に試してみる
- まとめ
どんなアセット?
レイキャストやコライダーを使って、
キャラクターの視界となるセンサーを簡単に作ることができるアセットです。
センサーだけでなく、視界に最適なコライダーもあります。
Sensor Toolkitは、ゲームオブジェクトに配置して、スクリプトやPlayMakerアクションと簡単に統合できる2Dおよび3Dセンサーコンポーネントのコレクションです。これは、レイキャストやトリガーコライダーなどのUnityの基本的なセンシング機能に加えて便利な抽象化ですが、多くの利点があります。軽量で高度な機能を備えており、幅広い問題に適用できます。
ドキュメントはこちら
開発環境
Unity2020.1.7f1
Sensor Toolkit ver1.6.5
インポートの確認
アセットインポート完了時はこんな感じです。
メインとなるコンポーネントはトップに配置されています。
Examplesの中にデモシーンが含まれています。
Actionシーン
2つのチームに分かれたBotがお互いに戦いあっているシーン
Stelthシーン
WASDとマウスで操作するステルスゲーム
このアセットのイメージに一番合うかも。
主要コンポーネント
このアセットを使いこなすうえで重要なコンポーネントを紹介します。
パラメータはたくさんあるので重要なやつだけ。
FOVCollider
コーン状の視野を提供するコライダーコンポーネント。キャラクターの視野にぴったりです。
コーンはStart時にメッシュが動的に生成されます。
パラメータ
Length:視野の長さ
BaseSize:視野のサイズ(視野開始地点側の大きさ)
FOVAngle:視野の角度(横方向の角度)
ElevationAngle:視野の仰俯角(上下方向の角度)
Resolution:円弧の頂点の数(可能な限り少ない方がいいらしい)
FOV Colliderはセンサーコンポーネントではないのでこれ単体で探知などはできません。
TriggerSensorコンポーネントと併用しましょう。
センサーコンポーネントの共通機能
センサーはGameObjectを検知しリスト化します。センサーから離れたときにリストから削除されます。
検知時とセンサーから離れた時にイベントを発行します。
共通のパラメータ
センサーごとにちょっと違いはある
Ignore List:センサーで検出しないGameObjectのリスト。視線を遮ることはある
Enable Tag Filter:Trueにすると、TagFilterに含まれるオブジェクトのみ検知する
Detects On Layers:探知するオブジェクトのレイヤー。初期値Nothingなので注意
Detection Mode:検出モード。Rigid bodiesの場合Rigidbodyがないと無視される
Update Mode:Sensorの更新モード。毎フレームだったりインターバルを指定したり
Requires Line Of Sight:視線が通っているオブジェクトのみ検出する
Events:検知及び見失った時に呼ばれるイベントを設定
RangeSensor
Sphere型のセンサーコンポ―ネント。範囲内のコライダーかRigidbodyを検出します。
一定間隔ごとに検出するほか、手動(任意のタイミング)で検出させることも可能。
(内部的にはPhysics.OverlapSphereを使用しています)
パラメータ
Sensor Range:Sphereのサイズ
RaySensor
Rayを使うセンサーコンポーネント。
Rayの長さや検出するレイヤー、それを遮るレイヤーにより構成されます。
RauCastHitを使うため、接触点や表面法線、ブロックしたコライダーを取得できます。
パラメータ
Length:Rayの長さ
Radius:Rayの半径、0より大きい場合spherecastを使用します
Direction:Rayの方向
World Space:Directionの値がWorldSpaceかLocalSpaceか
SteeringRig
ステアリングベクトルを計算するコンポーネントです。
障害物をナビゲートするのに使われます。子オブジェクトにRaySensorを配置して使いますが、
SensorToolkit / SteeringRigPrefabsにすぐに使えるPrefabが用意されています。
Trigger Sensor
isTriggerなコライダーを使うセンサーコンポーネントです。(ColliderとRigidbodyが必須)
一般的によく使われる検出方法ですが、設定は慎重に行う必要があります。
OnTriggerEnterとOnTriggerExitで検出を行いますが不要なものを検出する可能性もあります。
BoxColliderなど自前のColliderで探知できます。
前述のFOV Colliderと併用すると簡単に視界を作成できます。
実際に試してみる
FOV ColliderとTrigger Sensorでキャラクターの視界を作ってみます。
キャラクターの用意
お馴染みSDユニティちゃんを使います。これはなんでもいいです。
センサーコンポーネントの設定
ユニティちゃんの子オブジェクトに空のゲームオブジェクトを作成し、
FOV ColliderとTriggerSensorコンポーネントをアタッチします。パラメータはこんな感じです。
UIの作成
発見状態かどうかわかりやすいようUIを作成します。これはなんでもいいです。
スクリプトの作成
以下のSensorTestを作成します。
探知時と見失った時に呼ばれる2つのメソッドを定義しています。
やっていることはそれぞれUIをオンオフするだけです。
TriggerSensorの設定でPlayerタグ以外のオブジェクトは探知しないようにしているので、
オブジェクトの識別処理を入れる必要はありません。(とても便利)
using UnityEngine; public class SensorTest : MonoBehaviour { public GameObject m_DetectIcon; public void Detect(GameObject _gameObject, SensorToolkit.Sensor _sensor) { m_DetectIcon.SetActive(true); } public void Lost (GameObject _gameObject, SensorToolkit.Sensor _sensor) { m_DetectIcon.SetActive(false); } }
このスクリプトを、先ほど作った空のゲームオブジェクトなど適当な場所にアタッチします。
イベントの設定
TriggerSensorコンポーネントのEventにSensorTestのメソッドを登録します。
これで完成!
FOV Colliderの範囲内に入ると探知されているのがわかります。
壁の遮られたり、範囲内に出ると見失っていますね。
まとめ
・Sensor Toolkitを使うとキャラクターの視界が簡単に実装できる
・4種類のセンサーコンポーネントと視界用のColliderが用意されている
このような視界システムは自作している方が多いと思います。
Colliderを使って開発するのが一般的(Unityのチュートリアルなど)ですが、
視界用のFOV Colliderが用意されているのがとてもうれしいですね。
センサーコンポーネントも視点が通っているかの判定や、
タグ・レイヤーによる探知範囲の設定など便利な機能がそろっているので、
ステルスゲームや戦闘ゲームを開発している方にオススメのアセットです。
アセットストアでも人気順上位です!評価も高い!
以上です。
他のアセットの紹介記事はこちら↓
※本記事にはAssetStoreアフィリエイトリンクが含まれています。
他、間違っている箇所、わかりにくい所がありましたらコメントにお願いします。