# Blackboard

Blackboardは複数の変数を管理し、グラフ間の値の受け渡しや一時的な値の保持を行います。

## Blackboardを内蔵する機能

- Logic Controller
- ノードグラフ
- Blackboard Asset

## 使用できる変数の型について

Unityがシリアライズに対応している型が変数に使用できます。
詳細はUnity - Manual: Script serializationを参照してください。

## UIの説明

### (A)ツールバー

変数の追加ボタンと名前の検索フィールドがあります。

### (B)変数の名前

変数の型の種類アイコンと名前です。

### (C)変数の値

変数の値の編集フィールドです。

## 操作方法

### 変数の作成

1. ツールバーの「+」ボタンをクリック
2. 型選択メニューのツールバーにある変数の種類ドロップダウンでSingleかListを選択
   Listにするとリスト(可変長配列)の変数を作成できます。
3. 型選択メニューで型を選択。
4. 変数が作成され名前の入力モードになるため、名前を入力。
5. `Enterキー`で確定。

### 変数の削除

以下のいずれかの方法で削除できます。

- 変数の名前を右クリックし、メニューからDeleteを選択
- 変数を選択し`Deleteキー`

### 並び替え

1. 変数の名前をドラッグ開始
2. 並び替え先にドロップ

### リネーム

以下のいずれかの方法でリネームできます。

- 変数の名前を右クリックし、メニューからRenameを選択
- 変数の名前をクリックしてアクティブ状態にしてから再度クリック
- 変数の名前を選択して`F2キー`(Win)/`Enterキー`(Mac)

## 変数アクセス

### アクセス方法

アクセス方法 | イメージ | 説明
--- | --- | ---
Get |  | 変数の値をOutputDataPortに出力します。
Set |  | InputFieldから受け取った値を変数に格納します。
Event |  | 変数の値が変更された際にイベントを受け付けるEventComponent イベントが来た際に変数の値をOutputDataPortに出力し、イベントが来たことをノードに伝えます。

### アクセス対象

対象 | 説明
--- | ---
Root | BlackboardタブのRootにある変数にアクセスします。 ルートにあるメインのグラフ・GraphsタブのFunctionsに作成したグラフ・外部オブジェクトのグラフからアクセスできます。
Private | BlackboardタブのPrivateにある変数にアクセスします。 ルートにあるメインのグラフ・GraphsタブのFunctionsに作成したグラフからアクセスできます。
Local | BlackboardタブのLocalにある変数にアクセスします。 Grapsタブで選択している現在のグラフからのみアクセスできます。
Data Link | BlackboardタブのData Linkにある変数にアクセスします。 詳しくはDataLinkを参照してください。
External | 外部オブジェクトのRoot変数にアクセスします。 プレイ中にアクセスするLogic Player BaseインスタンスをTargetフィールドに設定する必要があります。
Parameter | 関数グラフのStart Functionノードにある変数にアクセスします。 Task GraphかEvaluate Graphのみ利用できます。 (Blackboardの変数のようにアクセスはできますが、厳密にはBlackboardとは無関係です)

各対象のアクセス可能な変数は、ノード作成メニューの (ノードの種類など) > Variables > (対象の種類) 以下に表示されます。

### 操作方法

グラフから変数にアクセスするには、変数をアクセスしたいグラフをLogic Editorで開く必要があります。

アクセスするには以下の方法でノードやノードコンポーネントを追加してください。

#### サイドパネル

1. サイドパネルのBlackboardタブを選択する。
2. Blackboardの種類のタブを選択する。
3. 変数をドラッグ開始
4. グラフビューにドロップ
5. ノード作成ニューからノードの種類を選択。
6. (ComputeノードでのGetアクセス以外)ノードが作成されると、ノードの名前入力モードになるので名前を入力。
   `Enterキー`で確定。

#### ノード作成メニュー

1. グラフビューで`Spaceキー`
   あるいは右クリックし、メニューからCreate Nodeを選択。
2. ノード作成メニューの検索欄に`Variables`と入力
3. アクセスしたい変数とノードを選択。
4. (ComputeノードでのGetアクセス以外)ノードが作成されると、ノードの名前入力モードになるので名前を入力。
   `Enterキー`で確定。

#### コンポーネント追加メニュー

1. Stateノードなどのノードコンポーネントリストの「+」ボタンをクリック。
2. ノードコンポーネント追加メニューの検索欄に「Variables」と入力
3. アクセスしたい変数とノードコンポーネントを選択。