以前の版
2020-02-09 23:14 時点における版
<Header>
<Parent> EventController
<Title> EventControllerの使い方
<CreatedAt> 2016-12-8
<Tags>
<Summary>
ここでは, EventControllerの基本的な使い方を説明します.
説明項目は以下のとおりです.
* 用語
* EventClipとは
* 外部スクリプトによるParameter設定と取得
* 実際に使ってみる
* 応用例
</Summary>
</Header>
# 用語
# EventNode
各状態のこと<br />
NodeにEventClipを登録することができる
# EventClip
実際にEventを実行するもの
# EventController
各EventNodeへの遷移をコントロールするもの
# Transition
あるEventNodeから別のEventNodeに移ること
# Layer
EventNodeとTransitionを含んだ一つの集まり<br />
LayerごとにEventNodeは独立に遷移する
# Conditions
EventNode遷移条件
# Junction
遷移の出入り口
# Parameter
EventControllerが持つ変数<br />
この変数を用いてEventControllerを操作する事ができる
# Int
整数型
# float
小数型
# bool
bool型
# Trigger
遷移すると消費される(trueがfalseになる)bool<br />
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関数一覧](CURRENT_DIR/ReferenceEventController)をご覧ください.
# 実際に使ってみる
# 概要
ここではEventControllerの使用例を挙げたいと思います.
二つのイベントを作成し実際に遷移させてみましょう.
# 手順
# 新しくGameObject'EventCtrl'を作成し, 'EventController'をAddComponent
# 二つのEventClipを作成します
以下のファイルを作成してください.
# EventA
<pre class="brush: csharp;">
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");
}
}
</pre>
# EventB
<pre class="brush: csharp;">
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");
}
}
</pre>
# 上で作成した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 に線をつなぐ。<br />
キャンセルしたい時は右クリックします。

# どちらかの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の大まかな仕組みを実現してしまいます.