Monoveheiviorから制御する方法
>|C#|
using UnityEngine;using System.Collections.Generic;
public class TestClass : MonoBehaviour{
// FSMがあるGameObject
public GameObject obj;
// 呼び出したいFSM名
public string FSMreferenceName;
// 呼び出したいイベント名
public string eventText;
private PlayMakerFSM[] FSMs;
void Start ()
{
// 初期時にobjにあるFSMを取得しておく
FSMs = obj.GetComponents<PlayMakerFSM>();
}
// イベントを送信する関数
void SendEvent ()
{
foreach (PlayMakerFSM fsm in FSMs)
{
if (fsm.FsmName == FSMreferenceName)
{
fsm.Fsm.Event(eventText);
}
}
}
}
||<
イベントをPlayMaker側に送信して遷移部分をPlayMakerに任せる方法。
使い方
遷移部分をPlayMaker側に任せることで、Excel等で遷移図を書く必要がなくなる。
遷移しているアニメーションもしてくれるので、上司にどういう流れで動いているのか説明しやすい。
>|C#|
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using HutongGames.PlayMaker;
public class Test : FsmStateAction
{
public FsmEvent fsm;
// 最初に呼ばれる
public override void OnEnter()
{
FsmDebugUtility.Log("OnEnter");
}
// 最後に呼ばれる
public override void OnExit()
{
FsmDebugUtility.Log("OnExit");
}
// 毎回呼ばれる
public override void OnUpdate()
{
// Jキーを押したら、イベントを発行する。
if(Input.GetKeyDown(KeyCode.J))
{
var f = Event(fsm);
FsmDebugUtility.Log(f.ToString());
}
FsmDebugUtility.Log("OnUpdate");
}
}
||<
使い方
overrideで親クラスから関数を再定義する方法、fsmから直接呼ばれるのでより細かい制御が可能、使いずらいので使ってない。
このクラスを記述後、PlayMakerのActionウィンドウにクラス名を入力すると、
そのクラス名が表示される。