目次 このページのソースコードを表示
公開日:
更新日:

ここでは, 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’になります

Layer追加
Layer追加
パラメータとしてTrigger を作成します

ここではトリガーの名前をNextにします

トリガーの作成
トリガーの作成
2つのEventNodeを作成します

Editor 内Create ボタンを2回押すと2つのEventNodeが作成されます. 名前はEventA, EventBとします

EventNode作成
EventNode作成
EventNode’EventA,EventB’それぞれにEventClip’EventA’ ’EventB’を登録します
Event登録
Event登録
EventNode’EventA’上で右クリック、’NewExit’ をクリック
EventNode’EventB’上で右クリック、 ’NewEntrance’ をクリック
EventAとEventBを線で結ぶ

どちらかのJunction を右クリック、make transition, もう片方のJunction に線をつなぐ。
キャンセルしたい時は右クリックします。

Eventをつなぐ
Eventをつなぐ
どちらかのJunction をクリックしConditions にNextを追加

これでNextというTriggerが引かれるとEvenAからEventBに遷移することになります.

トリガーの設定
トリガーの設定
EventNode’EventA’上で右クリック、SetAsEntry をクリック

これでGame起動時にEventAから始まることになります

SetAsEntry設定
SetAsEntry設定
Gameを開始

DebugLog 欄にEventAのStartEventが一回実行されそれ以降EventAのOnEventが実行されている事がわかります。

DebugLog欄
DebugLog欄
Console欄
Console欄
Editor上でNextをクリックしましょう

DebugLog 欄にEventAのEndEvent, EventBのStartEvent が一回実行されそれ以降EventBのOnEventが実行されている事がわかります。

DebugLog欄
DebugLog欄
Console欄
Console欄

応用例

このEvnentControllerを最大限に活用すると次のようなことができます.

CheckPoint形式でのSaveの実現

CheckPoint形式でのSaveの実現
CheckPoint形式でのSaveの実現

各Eventの本体であるEventClipにはEvent開始と終了の手続きが設定できるため, どのようなタイミングでEventが実行されてもEventは正常に動きます. つまりCheckPointの値に従ってあるEvent―その前に複数のEventがあっても―に直接飛んでもそのEventは正常に動きます. (ただし, どのタイミングでもEventが動くようにStartEvent関数を実装する必要があります)

QuickTimeEventの実現

QuickTimeEventの実現
QuickTimeEventの実現

Gameによくある要素としてQuickTimeEvent―あるキーを連打してEventを達成するもの―がありますが, これもEventControllerを使えば実現可能です. キーの要求を一つのEventと考え, 成功した場合と失敗した場合のためのTriggerを作るとQuickTimeEventの大まかな仕組みを実現してしまいます.

「https://contentsviewer.work/Master/Unity/UsageEventController」から取得