今回はUnityのスタンダードアセットにあるActivateTriggerを使ってみます。
ActivateTriggerはゲームオブジェクトに取り付け、このゲームオブジェクトが他のゲームオブジェクトを検出(Trigger)した時にインスペクタで指定したモードによってアクションを起こすスクリプトです。
例えばキャラクターに取り付けて、キャラクターがあるエリアに来たら他のゲームオブジェクトを登場させたり、ゲームオブジェクトを取り変えたりといった事が出来ます。
ActivateTriggerの設置
ActivateTriggerはAssets→StandardAssets→Utilityにあります。
または取り付けるゲームオブジェクトのインスペクタからAdd Component→Scripts→UnityStandardAssets.Utility→ActivateTriggerでも取り付けられます。
ゲームオブジェクトに取り付けるとインスペクタに
↑のように表示されます。
Actionはこのゲームオブジェクトが他のゲームオブジェクトを検知した時に何を実行するかを指定します。
Triggerは相手方のゲームオブジェクト、このゲームオブジェクトのスクリプトにあるDoActivateTriggerというメソッドを実行します。
Replaceは相手方のゲームオブジェクトをSourceに指定したゲームオブジェクトに取り変えます。
Activeは相手方のゲームオブジェクトをアクティブにします。
Enableは相手方のゲームオブジェクトのビヘイビアを有効にします。
Animateは相手方のゲームオブジェクトのAnimationを再生します。
DeactivateはActiveの逆で相手方のゲームオブジェクトを非アクティブにします。
Targetは相手方のゲームオブジェクトを設定します。
SourceはモードをReplaceにした時に取り変えるゲームオブジェクトを設定します。
TriggerCountは何回トリガーするかの回数で指定回数のアクションを起こします。
Repeat Triggerにチェックを入れるとTriggerCountの数値にかかわらず何回でもアクションを起こせます。
キャラクターにActivateTriggerを取り付け確認する
説明だけを見ても解り辛いので、キャラクターにActivateTriggerを取り付けて他のゲームオブジェクトに接触し確認してみます。
キャラクターとカメラは
で作成したキャラクター操作とカメラ操作を使います。
キャラクターにActivateTriggerを取り付けます。
相手方のゲームオブジェクトは空のゲームオブジェクトを作り名前をTargetにし、Box Colliderを取り付けIs Triggerにチェックします。
その子要素に3D Object→Cubeを配置しBox ColliderのIs Triggerにチェックを入れました。
またTargetと子要素のCubeにはActivateTriggerTestというスクリプトを作り取り付けます。
1 2 3 4 5 6 7 8 9 10 11 | using UnityEngine; using System.Collections; public class ActivateTriggerTest : MonoBehaviour { public void DoActivateTrigger() { Debug.Log (gameObject.name); } } |
このスクリプトはモードをTriggerにした時にメソッドが実行されるかどうかを確認する為に取り付けています。
相手方のゲームオブジェクトの構成とインスペクタは
↑のようになります。
それでは実行して確認してみます。
↑のようになりました。
Enableはコンポーネントを有効化すると思うんですが、どう設定していいかわからず、AnimateはAnimationコンポーネントの再生をするんですがAnimationコンポーネント自体が古いのでこれは使わないかも?
相手方のコンポーネントの有効化や相手方のAnimatorを操作し、相手方のアニメーションをトリガーしたいといった時は自前のスクリプトを組んだ方が良さそうですね。
ですが、スクリプトを取り付ける事で相手のゲームオブジェクトのアクティブ・非アクティブをすぐにしたいといった時はActivateTriggerを使うと手っ取り早いかもしれません。
用途としてはキャラクターがあるエリアに侵入したら敵やアイテムを登場させるといった場面で活躍しそうですね。