# スクリプト生成

メソッドやプロパティなどのメンバーにアクセスするスクリプトを生成できます。

アクセスしたいメンバーを一覧から選択するだけで作成されます。
スクリプトの記述作業をひとつひとつ行う必要なく迅速に実装できます。

## 条件

アクセスできるメンバーの条件は以下の通りです。

- Assembly Definition Fileもしくは事前コンパイル済みのマネージドDLLに定義されている型であること
- public型のpublicメンバーであること
- ジェネリック型やジェネリックメソッド以外であること
- 型やメンバーに`LogicToolkit.IgnoreGeneratorAttribute`が適用されていないこと

Assembly-CSharpなどのスクリプト用デフォルトアセンブリはスクリプト生成用アセンブリから参照できないため対象外です。

## 対応しているメンバーアクセス

対応しているメンバーアクセスは以下の通りです。

### フィールドの取得

フィールドの値を取得するスクリプトを作成します。

作成されるコンポーネント

フィールドの型によって作成されるコンポーネントが変わります。

フィールドの型 | 作成されるコンポーネント | 説明
--- | --- | ---
bool型 | EvaluateComponent | 値を評価結果として返すスクリプトを作成します。
delegate型 | EventComponent | イベントの呼び出しを待機するスクリプトを作成します。 イベントが呼ばれた際に受け取った引数の値を`OutputDataPort`から出力します。
UnityEvent型 | EventComponent | イベントの呼び出しを待機するスクリプトを作成します。 イベントが呼ばれた際に受け取った引数の値を`OutputDataPort`から出力します。
その他 | ActionComponent | 値を取得し、`OutputDataPort`から出力するスクリプトを作成します。

### フィールドの設定

フィールドの値を設定するスクリプトを作成します。

作成されるコンポーネント

ActionComponent

### フィールドのトゥイーン

フィールドの値を指定値になるまで徐々に補間するスクリプトを作成します。
トゥイーン可能な型のみ生成できます。

作成されるコンポーネント

TaskComponent

### プロパティの取得

プロパティの値を取得するスクリプトを作成します。

作成されるコンポーネント

プロパティの型によって作成されるコンポーネントが変わります。

プロパティの型 | 作成されるコンポーネント | 説明
--- | --- | ---
bool型 | EvaluateComponent | 値を評価結果として返すスクリプトを作成します。
delegate型 | EventComponent | イベントの呼び出しを待機するスクリプトを作成します。 イベントが呼ばれた際に受け取った引数の値を`OutputDataPort`から出力します。
UnityEvent型 | EventComponent | イベントの呼び出しを待機するスクリプトを作成します。 イベントが呼ばれた際に受け取った引数の値を`OutputDataPort`から出力します。
その他 | ActionComponent | 値を取得し、`OutputDataPort`から出力するコンポーネントを作成します。

### プロパティの設定

プロパティの値を設定するスクリプトを作成します。

作成されるコンポーネント

ActionComponent

### プロパティのトゥイーン

プロパティの値を指定値になるまで徐々に補間するスクリプトを作成します。
トゥイーン可能な型のみ生成できます。

作成されるコンポーネント

TaskComponent

### イベントの待ち受け

イベントの呼び出しを待機するスクリプトを作成します。
イベントが呼ばれた際に受け取った引数の値を`OutputDataPort`から出力します。

作成されるコンポーネント

EventComponent

### メソッドの呼び出し

メソッドを呼び出すスクリプトを作成します。

作成されるコンポーネント

戻り値の型によって作成されるコンポーネントが変わります。

戻り値の型 | 作成されるコンポーネント | 説明
--- | --- | ---
bool型 | EvaluateComponent | 戻り値を評価結果として返すスクリプトを作成します。
非同期(await可能な型もしくはasync)メソッド | TaskComponent | 完了するまで待機するスクリプトを作成します。
AsyncOperation | TaskComponent | 完了するまで待機するスクリプトを作成します。
その他 | ActionComponent | メソッドを呼び出すスクリプトを作成します。

メソッドの引数がoutやrefの場合は、実行後に引数の結果も`OutputDataPort`から出力します。

## 作成方法

メンバーにアクセスするスクリプトは以下の方法で作成できます。

### ノード/コンポーネント選択メニュー

- グラフビューのノード作成メニューやコンポーネント選択メニューを開く
- Membersタブを選択する。
- アクセスしたいメンバーの名前で検索する。
- アクセスしたいメンバーを選択する。
- (ノード作成メニューの場合は、作成するノードの種類を選択する。)

選択したメンバーにアクセスするスクリプトがすでに生成済みの場合は既存のスクリプトを使用します。
未生成の場合は生成処理とコンパイルが行われ、完了後にノードの作成などが行われます。

また、既に生成済みのスクリプトはScriptsタブにも表示されます。

### Logic Script Generatorウィンドウ

Logic Script Generatorウィンドウでは事前に複数のスクリプトをまとめて作成できます。

- メニューからLogic Toolkit > Logic Script Generatorを選択し、Logic Script Generatorウィンドウを開く。
- 左側ペインの「+」ボタンをクリック。
- ツリーから追加したいメンバーをチェックする。
- 追加メニューの「Add」ボタンをクリックする。
- Logic Script Generatorウィンドウに戻り、左側ペインの下部の「Apply」ボタンをクリックする。

詳細はLogic Script Generatorウィンドウを参照してください。

## 注意点

メンバーへのアクセス情報は型名やメンバー名などで管理されています。
生成済みスクリプトのメンバーなどをあとから変更や削除などを行うとコンパイルエラーとなります。
「Logic Script Generatorウィンドウ」を開き、該当のスクリプトを修正もしくは削除してください。

型名を変更する場合は、MovedFromAttributeを適用することで自動的に移行が行われます。