2020年4月26日日曜日

C#スクリプトとの連携

以前にも少し書いたのですが、PlayMakerと、シーン上のオブジェクトに付けた
C#スクリプトとの連携について補足しておきます。

1: PlayMakerからのアプローチ。
PlayMakerのステート内から、C#スクリプト内の変数の値を取得、設定する。
メソッドを実行する。

2: C#スクリプトからのアプローチ。
C#スクリプトから、PlayMaker、FSM内の変数の値を取得する、設定する。
FSMにイベントを発信する。

@ ------------------------------ @

1のPlayMakerからのアプローチについては、
ブログ内ページ  コンポーネントの値を操作する[Set Property] に説明した通りです。
インスペクタに表示されたスクリプトを、PlayMakerエディタのアクション欄にドロップする
だけで、CallMethod[メソッド実行] SetProperty[変数設定] GetProperty[変数取得] が
行えます。

PlayMakerからスクリプトを操作するのは、わかり易く簡単です。

--------------------

2の C#スクリプトからのアプローチ

まず、PlayMaker、FSMへのイベント発信について。
シーン内の全てのPlayMaker_FSMに対して全体イベントを発信するには、
C#スクリプト内に

// FSMに送信
PlayMakerFSM.BroadcastEvent ("送信エラーですね");

のように記すことで、イベントを送ることができます。(個別は少し面倒、参照
そして、FSM内で、このようにグローバルイベントとして受け取ることができます。


そして、スクリプトからFSM内の変数操作

□ C#スクリプトからPlayMakerのグローバル変数を操作は

冒頭で

using HutongGames.PlayMaker;

を記した上で

// PlayMaker のグローバル変数 showtextへ スクリプト内の変数
// Hyouji の内容を代入する。
FsmVariables.GlobalVariables.GetFsmString("showtext").Value = Hyouji;

のように行います。


■ C#スクリプトから個別のFSMの変数を操作する場合は

冒頭で

using HutongGames.PlayMaker;

を記した上で

// PlayMakerFSM 型の変数、Kube_fsm を作成
PlayMakerFSM Kube_fsm;

// Kube_fsm に 「Cube」という名前のオブジェクトのFSMコンポーネントを代入する
Kube_fsm = GameObject.Find ("Cube").GetComponent<PlayMakerFSM> ();

// Kube_fsmに格納したFSM の 整数型変数Cube_Xの値を1にする
Kube_fsm.FsmVariables.GetFsmInt ("Cube_X").Value = 1;

のように行います。

(参考 複数のFSMが付いたオブジェクトの場合
スクリプトからPlaymakerのローカル/グローバル変数にアクセスする方法)

--------------------

このように、C#スクリプトからPlayMakerの個別のFSMにアプローチするのは
少し面倒です。

スクリプト内から変数を渡す、受け取る、必要がある場合は、グローバルイベント
でPlayMakerのFSMに合図を送り、ステートからスクリプト内の変数の内容を
受け取る、FSM内の変数を渡す、等に置き換えたほうが楽だと思います。

0 件のコメント:

コメントを投稿