コーディング編


今回は、ステートの切り替わりタイミングがわかるログ出力や、独自の条件によるステート遷移の定義など、スクリプトを自作する方法について解説していきます。

まだ基礎編を見ていない方は、先に基礎編をご覧ください。

基礎編

なお、こちらではUnityにおけるスクリプトの基本的な解説は行いません。
詳しくはUnityマニュアル「Scripting」を参照してください。

Unityマニュアル「Scripting」

動作環境

このチュートリアルは、以下の環境で作成しております。

Unity 2019.4.8f1
Arbor 3.7.0

バージョンによっては説明と異なる箇所があるかと思いますのがご了承ください。

チュートリアル用プロジェクト作成

まずは、チュートリアル用にプロジェクトを作成してください。

プロジェクト名 ArborTutorial02
モード 3D
インポートするアセット Arbor

プロジェクトの作成やArborのインポートについては「Arborを使用するための準備」を参照してください。

ログ出力スクリプトの作成

ArborFSMで使用できるスクリプトには2種類あり、今回はステートに設定できるStateBehaviourを作成します。

  • ProjectウィンドウでAssetsフォルダを選択。
  • Projectウィンドウの+ボタンをクリック。
  • メニューから「Arbor > StateBehaviour C#Script」を選択。
  • スクリプトファイル名を「DebugLogBehaviour」にする。
GIF

StateBehaviourとは

StateBehaviourとは、基礎編で使用したTimeTransitionやActivateGameObjectのようにArborFSMのステートの挙動を記述できるスクリプトです。

ステート用の制御のほか、MonoBehaviourと同様に編集可能なパラメータやOnCollisionEnterなどのコールバックも使用できるようになっています。

先ほど作成したDebugLogBehaviour.csファイルをダブルクリックしてIDEで開いてみましょう。

新規で作成されたスクリプトには一般的によく使用するコールバックをあらかじめ定義してあります。

このOnStateAwake()やOnStateBegin()などが、ステートの制御にかかわるコールバックメソッドになります。

簡単に説明しますと、以下のような役割になっています。

OnStateAwake() はじめてステートに入った時点で、一度だけOnStateBegin()の前に呼ばれる。
OnStateBegin() ステートに入った時点で呼ばれる。
OnStateEnd() ステートから出た時点で呼ばれる。
OnStateUpdate() ステートに入っている間、毎フレーム呼ばれる。
呼び出しタイミングとしては、MonoBehaviour.Update()と同様。
OnStateLateUpdate() ステートに入っている間、毎フレームUpdate()後に呼ばれる。
呼び出しタイミングとしては、MonoBehaviour.LateUpdate()と同様。

また、1つのステートに複数挙動を追加している場合、これらのコールバックはArbor Editorウィンドウで見た時の上から順に呼ばれるようになっています。

StateBehaviourについての詳細は、「スクリプティング : StateBehaviour」を参照してください。

スクリプティング : StateBehaviour

ステートに入った時点でログ出力

まずは、ステートに入った時点でログを表示して、正常にスクリプトが動いているのを確かめてみましょう。

先ほど作成したDebugLogBehaviour.csをIDEで開いていただき、OnStateBegin()内を記述していきます。

なお、編集した箇所のみ記載いたしますので、ご了承ください。

  • OnStateBegin()を以下のように変更。
public override void OnStateBegin() {
	Debug.Log("OnStateBegin : " + state.name);
}

stateプロパティによってスクリプトを設定しているステートが参照できますので、そこからステート名もログに出すようにしています。

記述できましたらファイルを保存して、Unityに戻ります。

ArborFSMオブジェクトの作成

ArborFSMオブジェクトを作成してステートマシンを使用できるようにします。

  • Hierarchyウィンドウの+ボタンをクリック。
  • メニューから「Arbor > ArborFSM」を選択。
GIF

作成したArborFSMをArbor Editorウィンドウで表示します。

  • ArborFSMオブジェクトを選択。
  • InspectorのArborFSMにある「Open Editor」ボタンをクリック。

ステート作成

ステートを作成します。

  • グラフの何もないところを右クリック。
  • メニューから「ステート作成」を選択。
  • ステート名を「DebugLog」とする。
GIF

DebugLogBehaviourを追加

DebugLogステートにDebugLogBehaviourを追加します。

作成したスクリプトは、デフォルトでは挙動選択ウィンドウのScriptsグループに格納されるようになります。

  • DebugLogステートの設定アイコンをクリック。
  • メニューから「挙動追加」を選択。
  • 挙動選択ウィンドウで「Scripts > DebugLogBehaviour」を選択。
GIF

DebugLogBehaviourにはパラメータがないため特に設定の必要もなくこれで完了です。

ここまでの動作確認

ここで一旦実行して確認してみましょう。

Consoleウィンドウが表示されていない場合は上部メニューの「Window > General > Console」を選択して表示してください。

  • プレイボタン」を押してConsoleウィンドウを確認。

DebugLogステートに追加したDebugLogBehaviourのOnStateBegin()が呼び出され、先ほど記述したログが表示されるようになりました。

パラメータの定義

次に、DebugLogBehaviourにパラメータを定義して、Arbor Editorで設定できるようにしてみましょう。

DebugLogBehaviour.csをIDEで開き、メンバ変数を定義します。

ArborはUnityのシリアライズ機能によりパラメータを定義できますので、基本はMonoBehaviourと同様です。

今回は、このDebugLogBehaviourにstringを追加して、OnStateBegin()でのログに追加する形で動作を確認します。

  • メンバ変数は以下のように追加。
public string logText;
  • OnStateBegin()を以下のように変更。
public override void OnStateBegin() {
	Debug.Log("OnStateBegin : " + state.name + " : " + logText);
}

ファイルを保存して、Unityに戻ると再コンパイルされスクリプトの変更が反映されます。

DebugLogBehaviourの設定

Arbor Editorウィンドウを見ると、先ほど追加したパラメータが表示されていると思います。

この追加されたLog Textに「Hello Arbor Script!」と入力してみましょう。

ここまでの動作確認

正しくログが表示されるか確認してみましょう。

  • プレイボタン」を押して実行状態し、Consoleウィンドウを確認。

Log Textに入力した文字列がログに追加されているのがわかるかと思います。

このように、StateBehaviourで追加したパラメータをArbor Editorから編集して挙動を設定できます。

遷移先の指定を宣言

StateLinkをメンバ変数として宣言すると遷移ボタンが表示され指定できるようになります。

今回はスペースキーが入力されたら遷移するようにします。

DebugLogBehaviour.csをIDEで開き、スクリプトを変更してみましょう。

  • メンバ変数を以下のように追加。
public StateLink nextState;
  • OnStateUpdate()を以下のように変更。
public override void OnStateUpdate() {
	if (Input.GetKeyDown(KeyCode.Space)) {
		Transition(nextState);
	}
}

ファイルを保存してUnityに戻りましょう。

DebugLogステートのDebugLogBehaviourに「Next State」が追加されているのがわかります。

別のステートを作成

まだステートが1つしかないため、もう一つステートを作成して遷移がわかりやすくしてみます。

今回は、DebugLogステートを複製します。

  • DebugLogステートの設定アイコンをクリック。
  • メニューから「複製」を選択。
GIF

名前が同じままだと区別がつかないため変更します。

  • 新しく追加されたステートの名前欄をダブルクリック。
  • 名前を「DebugLog2」に変更。
GIF

StateLinkを接続

各ステートのStateLinkを接続して遷移させるようにします。

  • DebugLogステートの「Next State」をDebugLog2ステートへドラッグ&ドロップで接続。
  • DebugLog2ステートの「Next State」をDebugLogステートへドラッグ&ドロップで接続。
GIF

これでスペースキーを押すたびにステートが遷移し、Consoleにログが表示されるようになりました。

動作確認

最後に動作確認してみましょう。

  • プレイボタン」を押して実行開始。
  • GameウィンドウをアクティブにしConsoleウィンドウを見ながらでスペースキーを何度か押す。
GIF

スペースキーを押すたびにステートが切り替わりログが出力されているのがわかるかと思います。

Arbor Editorウィンドウも確認すると、正常にステートが切り替わっているのが確認できます。

GIF

ステート間や演算ノードとのデータの受け渡しなど、より詳しいカスタマイズ方法は「スクリプティング : データフロー」を参照してください。

スクリプティング : データフロー

次のステップ

以上で「コーディング編」は完了です。

「コーディング編」完了をツイート

次回は「コインプッシャーを作ろう」です。

コインプッシャーのように簡単なゲームをArborを用いて作成してみます。

コインプッシャーを作ろう

Privacy Preference Center

Your Privacy

This site uses cookies to display contents and advertisements tailored to users, provide social media functions, measure advertisement impressions and clicks. We also gather information on users' site usage status and provide them to social media, advertisement distribution and data analysis partners. Each partner may use this information in combination with other information that the user provided to each partner or other information gathered when the user used the service of each partner.

Analytics, Ads