ActionBehaviourスクリプトの書き方


今回は、ビヘイビアツリーで使用するActionBehaviourスクリプトの書き方について解説します。

事前知識

このチュートリアルには以下の知識が必要です。

チュートリアルプロジェクトの準備

今回のチュートリアルを実践するプロジェクトを準備しましょう。

動作環境

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

Unity 2019.4.40f1
Arbor 3.9.0

Arbor3の準備

まだ購入していない場合はアセットストアで購入する必要があります。
購入する場合は以下リンクからアセットの商品ページが開けます。

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

チュートリアル用にプロジェクトを作成します。

プロジェクト名 Arbor_BT_ActionBehaviour
テンプレート 3D
インポートするアセット Arbor 3: FSM & BT Graph Editor

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

ビヘイビアツリーを使用する準備

ビヘイビアツリーを使用するには、GameObjectにBehaviourTreeコンポーネントを追加する必要があります。

BehaviourTreeコンポーネント付きGameObjectの作成

ここでは、BehaviourTreeコンポーネント付きのGameObjectを作成します。

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

BehaviourTreeコンポーネントをArborEditorで開く

BehaviourTreeコンポーネントのグラフの編集はArbor Editorウィンドウで行います。

  • Hierarchyから作成したBehaviourTreeオブジェクトを選択。
  • InspectorウィンドウのBehaviourTreeコンポーネントにある「Open Editor」ボタンをクリック。
GIF

ActionBehaviourスクリプトを作成する

今回はチュートリアルのための試作ということで「ExpAction」スクリプトを作成していきましょう。

ExpActionスクリプトの作成

  • ProjectウィンドウでAssetsフォルダを選択。
  • Projectウィンドウの+ボタンをクリック。
  • メニューから「Arbor > BehaviourTree > ActionBehaviour C# Script」を選択。
  • スクリプト名を「ExpAction」に変更してEnterキーで確定。
GIF

作成したExpActionスクリプトについて

作成したExpActionスクリプトをダブルクリックしてコードエディタ(Visual Studioなど)で開いてみましょう。

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

OnAwake 初めてアクションノードがアクティブになった時に一度だけ呼ばれる。
OnStart アクションノードがアクティブになった時に呼ばれる。
OnExecute アクションノードが実行される時に呼ばれる。
OnEnd アクションノードが終了するときに呼ばれる。

アクション開始時のコーディング

今回は動作確認のため、ノードがアクティブになったときにログ出力してみましょう。

ExpActionスクリプトをコードエディタで開き、OnStartメソッドを以下のように変更してください。

これで、ExpActionスクリプトが紐づけられたアクションノードがアクティブになったとき、”ノード名 : OnStart”というログが表示されるようになります。

ExpActionスクリプトを使用する

作成したスクリプトを使ったアクションノードを作成しましょう

ExpActionアクションの作成

  • Rootノード下部のスロット(子スロットと呼ぶ)をドラッグ。
  • Rootノードより下のほうでドロップ。
  • メニューから「アクション作成」を選択。
  • アクション選択ウィンドウから「Scripts > ExpAction」を選択。
  • 名前はそのままEnterキーで確定。
GIF

プレイ確認

プレイして確認してみましょう。

Exp Actionノードが実行されると、Consoleに以下のようにログが出力されます。

ExpActionスクリプトはログ出力以外になにも行わないため、ログを一度出力した後は何もせず結果も返さないためExp Actionノードが実行され続けます。

実行終了のコーディング

ActionBehaviourは何かしらの処理が終わったらノードの実行を終了して親ノードに結果を返す機能が備わっています。

FinishExecuteについて

結果を返すには、FinishExecuteメソッドを使用します。
呼び出すとアクションノードは実行を終了し、引数の値に従って親ノードに成功/失敗を返します。
FinishExecuteを呼び出さなかった場合は、実行は終了せず次フレーム以降も同じノードが実行され続けます。

OnExecuteのコーディング

今回は動作確認のため、Spaceキーが押されたら親ノードに「成功」を、Enterキーが押されたら「失敗」を返すようにしてみましょう。

ExpActionスクリプトをコードエディタで開き、OnExecuteメソッドを以下のように変更してください。

アクションの結果による分岐

アクションの実行結果によって分岐するようにビヘイビアツリーを構築していきましょう。

Exp Actionへの接続解除と移動

コンポジットノードを組んでいくため、一旦Exp Actionへの接続を解除し邪魔にならない位置に移動させておきましょう。

  • Rootノードの子スロットとExp Actionノード上部のスロット(親スロットと呼ぶ)の接続線を右クリック。
  • メニューから「切断」を選択。
  • Exp Actionノードのヘッダ部をドラッグし、Rootノードより上のほうに移動。
GIF

失敗した時の分岐

ExpActionが失敗した場合の分岐のためにSelectorコンポジットを使用しWaitアクションを実行するようにします。

Selectorコンポジットの作成

  • Rootノードの子スロットをドラッグ。
  • Rootノードより下のほうでドロップ。
  • メニューから「コンポジット作成」を選択。
  • コンポジット選択ウィンドウから「Selector」を選択。
  • 名前はそのままでEnterキーで確定。
GIF

失敗時Waitアクションの作成

  • Selectorノードの子スロットをドラッグ。
  • Selectorノードより右下のほうでドロップ。
  • メニューから「アクション作成」を選択。
  • アクション選択ウィンドウから「Wait」を選択。
  • 名前は「Failure Wait」に変更しEnterキーで確定。
GIF

失敗時Waitアクションの設定

Failure WaitノードのWaitアクションは以下のように設定します。

Seconds 1

成功した時の分岐

ExpActionが成功した場合は、Sequencerコンポジットを使用しWaitアクションを実行するようにします。

Sequencerコンポジットの作成

  • Selectorノードの子スロットをドラッグ。
  • Selectorノードより左下のほうでドロップ。
  • メニューから「コンポジット作成」を選択。
  • コンポジット選択ウィンドウから「Sequencer」を選択。
  • 名前はそのままでEnterキーで確定。
GIF

成功時Waitアクションの作成

  • Sequencerノードの子スロットをドラッグ。
  • Sequencerノードより右下のほうでドロップ。
  • メニューから「アクション作成」を選択。
  • アクション選択ウィンドウから「Wait」を選択。
  • 名前は「Success Wait」に変更してEnterキーで確定。
GIF

成功時Waitアクションの設定

Success WaitノードのWaitアクションは以下のように設定します。

Seconds 1

ExpActionノードの移動と接続

  • ExpAcionノードのヘッダ部をドラッグして、Sequencerノードの左下あたりに移動。
  • Sequencerノードの子スロットをExpActionノードの親スロットにドラッグ&ドロップ。
GIF

プレイしてみよう

プレイして確認してみましょう。

Spaceキーを押すとSuccess Waitノードが実行されます。
Enterキーを押すとFailure Waitノードが実行されます。
何もキーを押さなければExp Actionノードが実行され続けます。

フィールドについて

今回は使いませんでしたが、MonoBehaviourスクリプトや他のArbor関連スクリプトと同様にフィールドによるプロパティ設定も可能です。

例えば受け付けるキーをフィールドで設定できるようにすると以下のようになります。

すると、ExpActionアクションでSuccess Key CodeとFailure Key Codeが設定できるようになります。

詳しくは「ActionBehaviour#フィールドの宣言」を参照してください。

おわり

以上でArborチュートリアル「ActionBehaviourスクリプトの書き方」は完了です。

チュートリアル完了をツイート

他のチュートリアルを見る