Unity: PlayMakerをC#で制御する方法。

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ウィンドウにクラス名を入力すると、

そのクラス名が表示される。