EventControllerの使い方
ここでは, EventControllerの基本的な使い方を説明します. 説明項目は以下のとおりです.
- 用語
- EventClipとは
- 外部スクリプトによるParameter設定と取得
- 実際に使ってみる
- 応用例
用語
EventNode
各状態のこと
NodeにEventClipを登録することができる
EventClip
実際にEventを実行するもの
EventController
各EventNodeへの遷移をコントロールするもの
Transition
あるEventNodeから別のEventNodeに移ること
Layer
EventNodeとTransitionを含んだ一つの集まり
LayerごとにEventNodeは独立に遷移する
Conditions
EventNode遷移条件
Junction
遷移の出入り口
Parameter
EventControllerが持つ変数
この変数を用いてEventControllerを操作する事ができる
Int
整数型
float
小数型
bool
bool型
Trigger
遷移すると消費される(trueがfalseになる)bool
Triggerが消費されるタイミングはすべてのレイヤーの処理が終わった後です.
EventClipとは
概要
EventClipとは, 実際にEventを行うコンポーネントです. ここでは, このEventClipについての説明をします.
継承
EventClipは必ずBaseEventClipを継承しなければいけません. BaseEventClipには, Eventに関する手続き―StartEvent, OnEvent, EndEvent―が宣言されています. 必ず, 派生先でこれらの関数を定義しなければなりません.
StartEvent
この関数―StartEvent―はEvent開始時に一回呼び出されます. 他のEventNodeから遷移してきたとき, 遷移先のEventNodeで登録されているEventClip内のStartEventが一回実行されます. この関数にはEvent実行の際の初期設定などを行うとよいでしょう.
EndEvent
この関数―EndEvent―はEvent終了時に一回呼び出されます. 他のEventNodeに遷移するとき, 遷移前のEventNodeで登録されているEventClip内のEndEventが一回実行されます. この関数にはEvent終了の手続きなどを行うとよいでしょう.
OnEvent
この関数―OnEvent―はEvent実行中常に呼び出されます. この関数の呼び出されるタイミングはUnityのUpdate関数と同じです. この関数内に実際に実行するEventの処理を書きます.
外部スクリプトによるParameter設定と取得
EventControllerを使用していくとEventControllerが使用するParameterを設定したいもしくは取得したい場合があります. 例を挙げると, あるEventを実行したときEventController内のbool値’EventStarted’をtrueにしたい, あるスクリプトでEventControllerが持つbool値―鍵を持っているかどうかのbool値―を取得したいなどです.
EventControllerは外部スクリプトによるParameterの設定, 取得に対応しています.EventControllerが用意しているGet, Set関数を使用してください. 詳しくはEventController関数一覧をご覧ください.
実際に使ってみる
概要
ここではEventControllerの使用例を挙げたいと思います. 二つのイベントを作成し実際に遷移させてみましょう.
手順
新しくGameObject’EventCtrl’を作成し, ’EventController’をAddComponent
二つのEventClipを作成します
以下のファイルを作成してください.
EventA
using UnityEngine; using System.Collections; using System; public class EventA : BaseEventClip { public override void StartEvent() { Debug.Log("[EventA] StartEvent"); } public override void EndEvent() { Debug.Log("[EventA] EndEvent"); } public override void OnEvent() { Debug.Log("[EventA] OnEvent"); } }
EventB
using UnityEngine; using System.Collections; public class EventB : BaseEventClip { public override void StartEvent() { Debug.Log("[EventB] StartEvent"); } public override void EndEvent() { Debug.Log("[EventB] EndEvent"); } public override void OnEvent() { Debug.Log("[EventB] OnEvent"); } }
上で作成したEventをGameObjectとしてScene上に配置します
GameObject’EventA’, ’EventB’を作成し, それぞれに上で作成したEventClip’EventA’, ’EventB’をAddComponent.
GameObject’EventCtrl’を選択し, EventControllerEditorを開きます.
Layerを追加し, 新しく作成したLayerを選択します.
デフォルトで, 新しく作成したLayer名は’BaseLayer’になります
パラメータとしてTrigger を作成します
ここではトリガーの名前をNextにします
2つのEventNodeを作成します
Editor 内Create ボタンを2回押すと2つのEventNodeが作成されます. 名前はEventA, EventBとします
EventNode’EventA,EventB’それぞれにEventClip’EventA’ ’EventB’を登録します
EventNode’EventA’上で右クリック、’NewExit’ をクリック
EventNode’EventB’上で右クリック、 ’NewEntrance’ をクリック
EventAとEventBを線で結ぶ
どちらかのJunction を右クリック、make transition, もう片方のJunction に線をつなぐ。
キャンセルしたい時は右クリックします。
どちらかのJunction をクリックしConditions にNextを追加
これでNextというTriggerが引かれるとEvenAからEventBに遷移することになります.
EventNode’EventA’上で右クリック、SetAsEntry をクリック
これでGame起動時にEventAから始まることになります
Gameを開始
DebugLog 欄にEventAのStartEventが一回実行されそれ以降EventAのOnEventが実行されている事がわかります。
Editor上でNextをクリックしましょう
DebugLog 欄にEventAのEndEvent, EventBのStartEvent が一回実行されそれ以降EventBのOnEventが実行されている事がわかります。
応用例
このEvnentControllerを最大限に活用すると次のようなことができます.
CheckPoint形式でのSaveの実現
各Eventの本体であるEventClipにはEvent開始と終了の手続きが設定できるため, どのようなタイミングでEventが実行されてもEventは正常に動きます. つまりCheckPointの値に従ってあるEvent―その前に複数のEventがあっても―に直接飛んでもそのEventは正常に動きます. (ただし, どのタイミングでもEventが動くようにStartEvent関数を実装する必要があります)
QuickTimeEventの実現
Gameによくある要素としてQuickTimeEvent―あるキーを連打してEventを達成するもの―がありますが, これもEventControllerを使えば実現可能です. キーの要求を一つのEventと考え, 成功した場合と失敗した場合のためのTriggerを作るとQuickTimeEventの大まかな仕組みを実現してしまいます.