ビヘイビアツリーやノードグラフの階層化などを実装したArbor3をリリースしました。
新機能まとめ
ビヘイビアツリー
AIの挙動制御に最適なノードグラフであるビヘイビアツリーを実装しました。
実行するノードの優先順位や条件などが視覚化できるため、従来のステートマシンに比べより複雑な挙動を組んでも整頓されたグラフが作りやすいです。
ビヘイビアツリーの詳細についてはこちらを参照してください。
ノードグラフの階層化
SubStateMachineやSubBehaviourTreeを使用することでノードグラフを階層化できるようになりました。
またEndStateMachineを使用することで成否を親グラフへ通知できます。
リファレンス
- 組み込み挙動のSubStateMachine
- 組み込み挙動のEndStateMachine
- 組み込み挙動のSubBehaviourTree
- 組み込みアクションのSubStateMachine
- 組み込みアクションのSubBehaviourTree
StateLinkのリルート
StateLinkのリルートノードにより接続ラインの整形がしやすくなりました。
他のノードと重なってしまって見にくい時などに活用してみてください。
CalculatorBranchのリルート
StateLinkと同様にCalculatorBranchもリルートノードを実装いたしました。
更新内容
新機能:Behaviour Tree
概要
新機能として、木構造により優先順位を見える化しながら挙動を組めるBehaviour Treeを追加しました。
最初にアクティブになるRootNodeや、子ノードの実行順などを決めるCompositeNodeと行動を指定するActionNodeがあります。
ActionNodeには挙動を記述するためのスクリプトActionBehaviourを設定できます。
ActionBehaviourも、ArborFSMのStateBehaviourと同様にカスタマイズ可能です。
CompositeNodeとActionNodeには実行する条件チェックや繰り返しなどを行うスクリプトDecoratorも追加できます。
こちらもカスタマイズが可能です。
他にも、ノードがアクティブな間実行されるServiceスクリプトにより柔軟なAIが作成可能となっております。
また、ArborFSMと同様に演算ノードと演算スロットを活用することでノード間のデータの受け渡しもできます。
コンポーネント
- BehaviourTreeコンポーネント追加。
組み込みCompositeBehaviour
- Selector追加。
- Sequencer追加。
組み込みActionBehaviour
- Wait追加。
- PlaySound追加。
- PlaySoundAtPoint追加。
- PlaySoundAtTransform追加。
- StopSound追加。
- SubStateMachine追加。
- SubBehaviourTree追加。
- InstantiateGameObject追加。
- DestroyGameObject追加。
- ActivateGameObject追加。
- AgentPatrol追加。
- AgentMoveToPosition追加。
- AgentMoveToTransform追加。
- AgentMoveOnWaypoint追加。
- AgentEscapeFromPosition追加。
- AgentEspaceFromTransform追加。
- AgentStop追加。
組み込みDecorator
- Loop追加。
- SetResult追加。
- InvertResult追加。
- ParameterCheck追加。
- CalculatorCheck追加。
- ParameterConditionalLoop追加。
- CalculatorConditionLoop追加。
- TimeLimit追加。
- Cooldown追加。
Script
- 子ノードの実行を制御するCompositeBehaviour追加。
- アクションを実行するActionBehaviour追加。
- ノードを装飾するDecorator追加。
- ノードがアクティブの間実行するService追加。
追加
Arbor Editor
- グラフの階層化に対応。
- サイドパネルにGraph項目追加。
- StateLinkのドラッグ中に何もないところでドロップした場合のメニュー追加。
- StateLink接続ラインのリルートノード追加。
- CalculatorBranch接続ラインのリルートノード追加。
- CalculatorBranchの値をクリックするとConsoleにログ出力するように追加。
- Alt(MacではOption)キーを押しながらグループノードを移動すると、グループ内のノードは移動しない機能を追加。
ArborFSM
- 開始時に再生するフラグPlay On Startフィールド追加。
- 更新間隔などの設定を行うUpdate Settingsフィールド追加。
ParameterContainer
- Componentパラメータの型指定を追加。
- Colorパラメータ追加。
組み込みStateBehaviour
- SubStateMachine追加。
- EndStateMachine追加。
- SubBehaviourTree追加。
- AgentPatrolにCenter Typeフィールド追加。
- AgentPatrolにCenter Transformフィールド追加。
- AgentPatrolにCenter Positionフィールド追加。
- RaycastTransitionにIs Check Tagフィールド追加。
- RaycastTransitionにTagフィールド追加。
Script
- グラフを扱うための基本クラスNodeGraph追加。
- NodeがNodeBehaviourを格納する場合に使用するインターフェイスINodeBehaviourContainer追加。
- NodeBehaviourが子グラフを格納する場合に使用するインターフェイスINodeGraphContainer追加。
- NodeBehaviour作成時に呼ばれるOnCreatedメソッド追加。
- NodeBehaviour破棄前に呼ばれるOnPreDestroyメソッド追加。
- ArborFSMInternalにPlayとStopメソッド追加。
- ArborFSMInternalにPauseとResumeメソッド追加。
- ArborFSMInternalにplayStateプロパティ追加。
- TimeTypeから現在時間を返すTimeUtility.CurrentTimeメソッド追加。
- Bezier2DにGetClosestParamメソッド追加。
- Bezier2DにGetClosestPointメソッド追加。
- Bezier2DにSetStartPointメソッド追加。
- Bezier2DにSetEndPointメソッド追加。
- ComponentParameterReferenceで参照するComponentの型をSlotTypeAttributeで指定できるように追加。
変更
Arbor Editor
- ツールバーのステートリストをサイドパネルに改名。
- サイドパネルのステートリストをノードリストに改名。
- ステートをコピー&ペーストした際に、コピー元とコピー先が同じArborFSMだった場合にStateLinkを接続したままペーストするように変更。
- ステートをコピー&ペーストした際に、StateLinkの接続先ステートもペーストされたノードならStateLinkを接続したままにするように変更。
- StateLinkのラインのマウスオーバー時に色を変更。
- StateBehaviourのタイトルバーを右クリックしたときにもメニューが表示されるように変更。
- 実行中にCalculatorBranchの値を表示する方法を、ラインをマウスオーバーするか右クリックメニューから「値を常に表示する」にチェックする方法に変更。
- 実行中の現在ステートのデザインを変更。
- 選択中ノードへの移動スクロールを調整。
組み込みStateBehaviour
- AgentMoveOnWaypoint開始時に現在目標地点への移動を行い、移動完了後に目標地点を次に移すように変更。
Script
- ArborFSMInternalをNodeGraphから継承するように変更。
- ArborFSMInternalのfsmNameを削除(NodeGraphにgraphNameを使用すること)。
- ArborFSMのFindFSMとFindFSMsをObsoleteに変更(NodeGraphのFindGraphとFindGraphsを使用すること)。
- StateBehaviourのstateIDをObsoleteに変更(nodeIDを使用すること)。
- NodeとNodeBehaviourから参照するグラフをArborFSMInternalからNodeGraphに変更。
- CalculatorNodeをNodeGraphで管理するように変更。
- GroupNodeをNodeGraphで管理するように変更。
- CommentNodeをNodeGraphで管理するように変更。
- ClaculatorBranchをNodeGraphで管理するように変更。
- CalculatorSlotのstateMachineフィールドをnodeGraphフィールドに変更。
- NodeBehaviourのstateMachineプロパティをStateBehaviourに移動。
- StateLinkのlineEnableをNonSerializedに変更。
- StateLinkのlineStartなどを削除しbezierフィールドを追加。
- TimeTransitionクラス内のTimeTypeをArbor名前空間に移動。
- 組み込みStateBehaviourの名前空間をArbor.StateMachine.StateBehavioursに変更。
- FlexibleComponentで指定したSlotTypeAttributeで参照するParameterを指定するように変更。
- 再描画が必要な時にEditorクラスのRequiresContentRepaintメソッドを使用できるように変更。
その他
- NodeGraphをInspectorからHierarchyにドラッグして移動できないように変更。
- 組み込みNodeBehaviour関連スクリプトをBuiltInBehavioursフォルダに移動。
修正
Arbor Editor
- ノードをコピーした後にArborFSMのCopy Componentを行うとノードのコピーが消えるのを修正。
- TransitionTiming.Immediateによる遷移を繰り返すとStackOverflowExceptionが発生していたのを修正。
- ステートにブレークポイントが設定されていてもTransitionTiming.Immediateによって遷移したい場合に停止しなかったのを修正。
- AddBehaviourMenuウィンドウとAddCalculatorMenuウィンドウ内の階層アニメーション中に検索ワードを入力すると例外が発生するのを修正。
- NodeGraphのRemove ComponentをUndoした場合にArbor Editorの参照が戻らないのを修正。
- ノード内を右クリックしたときにグラフのメニューが表示されないように修正。
- 実行中にStateBehaviourのbehaviourEnabledを切り替えた場合にOnStateAwakeとOnStateBeginが呼ばれるように修正。
- 実行中にStateBehaviourを追加した場合にOnStateAwakeとOnStateBeginが呼ばれるように修正。
- Unityを起動した際にTypePopupWindowで”Removed unparented EditorWindow while reading window layout”のログが出るのを修正。
- 実行中に常に再描画していたのを必要な時のみ行うように修正。
- ノード作成時にグリッドスナップするように修正。
- ノード作成などでグラフ領域のサイズが変更されたときにノードの表示がボケるのを修正。
Script
- EachFieldで基本クラスのpublicとprotectedフィールドを重複して列挙していたのを修正。
その他
- InspectorからResetを行うとNodeBehaviourが内部的に残ったままになるのを修正。
- ArborFSMコンポーネントを削除した時にCalculatorが内部的に残ったままになるのを修正。
アセットストア
Arbor3は別パッケージとしてリリースしたため、Arbor2を購入済みの方でも別途アップグレード料金がかかります。
ただし、Arbor2を2018/02/07以降に購入していた場合は無料でアップグレードできます。
更新手順
Arborをアップデートする際は以下の手順に従ってください。
- 更新前に必ずプロジェクトのバックアップを取ってください。
- 既存のシーンを開いている場合は、メニューの「File / New Scene」からシーンを新規作成しておきます。
- Arbor Editorウィンドウを開いている場合は一旦閉じておきます。
- 既にインポートされているArborフォルダを削除。
- Arborの新バージョンをインポート。