# Arbor3からの移行

「Arbor 3: FSM & BT Graph Editor(以下Arbor3)」からの移行について説明します。

Arbor3とLogic Toolkitには互換性がありません。
Arbor3で開発していたプロジェクトをLogic Toolkitに乗り換える場合は以下の点を参考に組みなおしが必要になります。

## アーキテクチャの相違点

要素 | Arbor3 | Logic Toolkit
--- | --- | ---
ステートマシン | ArborFSMコンポーネント | State
ビヘイビアツリー | BehaviourTreeコンポーネント | BehaviorTree
データフロー | DataSlot FlexibleField Calculator | OutputDataPort InputDataPort InputField データ演算ノード群 データ変換ノード群
グラフの階層化 | SubStateMachine SubBehaviorTree | 関数グラフ (Task Graph, Evaluate Graph)
変数 | ParameterContainer | Blackboard
API呼び出し | 組み込みスクリプト リフレクションによる呼び出し スクリプト自作 | 組み込みスクリプト スクリプト生成 スクリプティング
ノード用スクリプト | MonoBehaviour | SerializeReference

## グラフの相違点

### Arbor3

- グラフの種類としてステートマシンとビヘイビアツリーが用意されている。
- MonoBehaviourから派生した「Unityオブジェクト」で管理。
- 子グラフも内部的に同GameObjectにコンポーネントを追加する形式で実現。
- グラフコンポーネントを持ったプレハブを作成することで擬似的にグラフの再利用が可能。

### Logic Toolkit

- ノードの種類によってのみどのように実行されるかが制御される。
  - ステートマシンはStateで実現。
  - ビヘイビアツリーはBehaviorTreeで実現。
- SerializeReferenceで管理。
- 子グラフはUnityオブジェクトの制限なく追加可能。
- Logic AssetやTask Graph Asset、Evaluate Graph Assetというアセットによりグラフの再利用が可能。

## ノード用スクリプトの相違点

### Arbor3

- MonoBehaviourから派生した「Unityオブジェクト」で管理。
- MonoBehaviourのメッセージ(OnCollisionEnterなど)も呼び出される。
- ノード用スクリプトは流用不可
  Stateに使用できるのがStateBehaviourスクリプトのみのため、BehaviourTreeでも同一処理を作成したい場合はActionBehaviourスクリプトも別途作成する必要がある。
- APIのメンバーアクセスを行うには、高負荷なリフレクションによる呼び出しか、スクリプトの記述が必要。

### Logic Toolkit

- SerializeReferenceで管理。
- MonoBehaviourのメッセージ(OnCollisionEnterなど)は呼ばれない。
  - メッセージを受け取るMonoBehaviourスクリプトを介して、イベントを待ち受けるなどの置き換えが必要。
- ノード用スクリプトが流用可能
  ActionComponentやTaskComponentが、StateにもBehaviorTreeにも利用可能。
- APIのメンバーアクセスを行うスクリプトを生成可能。

## 組み込み機能について

### Arbor3

- 各種コンポーネントと関連スクリプトで対応。
- 対応していない機能についてはそれぞれユーザーにスクリプトを記述してもらう方式。

### Logic Toolkit

- アセット本体の機能を絞り込むため、最低限の組み込み機能のみ実装。
- スクリプト生成機能によりメンバーアクセスが可能であるため、個別にスクリプトを記述する必要なケースが少ない。
- 必要に応じて対応パッケージを別途提供予定。