# スクリプト生成

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

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

## 条件

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

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

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

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

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

### フィールドの取得

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

メニュー上での表記

`フィールド名 [Get]`

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

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

フィールドの型 | 作成されるコンポーネント | 説明
--- | --- | ---
bool型 | EvaluateComponent | 値を評価結果として返すスクリプトを作成します。
その他 | ActionComponent | 値を取得し、`OutputDataPort`から出力するスクリプトを作成します。

delegate型や`UnityEvent`型の場合はフィールドの取得が出来ず、イベントの待ち受けスクリプトになります。

### フィールドの設定

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

メニュー上での表記

`フィールド名 [Set]`

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

ActionComponent

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

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

メニュー上での表記

`フィールド名 [Tween]`

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

TaskComponent

### プロパティの取得

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

メニュー上での表記

`プロパティ名 [Get]`

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

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

プロパティの型 | 作成されるコンポーネント | 説明
--- | --- | ---
bool型 | EvaluateComponent | 値を評価結果として返すスクリプトを作成します。
その他 | ActionComponent | 値を取得し、`OutputDataPort`から出力するコンポーネントを作成します。

delegate型や`UnityEvent`型の場合はプロパティの取得が出来ず、イベントの待ち受けスクリプトになります。

### プロパティの設定

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

メニュー上での表記

`プロパティ名 [Set]`

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

ActionComponent

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

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

メニュー上での表記

`プロパティ名 [Tween]`

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

TaskComponent

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

イベントの呼び出しを待機するスクリプトを作成します。
イベントが呼ばれた際に受け取った引数の値を`OutputDataPort`から出力します。
また、戻り値を返す必要のあるデリゲート型には対応しておりません。

メニュー上での表記

`メンバー名`

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

EventComponent

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

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

メニュー上での表記

`メソッド名(引数)`

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

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

戻り値の型 | 作成されるコンポーネント | 説明
--- | --- | ---
bool型 | EvaluateComponent | 戻り値を評価結果として返すスクリプトを作成します。
その他 | ActionComponent | メソッドを呼び出すスクリプトを作成します。

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

### 待機可能なメソッドの呼び出し＆待機

待機可能なメソッドを呼び出して待機するスクリプトを作成します。

戻り値が`System.Threading.Tasks.Task`などのawait可能な型(独自定義の型や拡張メソッドによる待機対応も含む)か`UnityEngine.AsyncOperation`の場合に 待機可能なメソッド となります。
待機可能なメソッドであっても待機をしない通常のメソッド呼び出しスクリプトも利用可能な点にご注意ください。

メニュー上での表記

`メソッド名(引数) [Await]`

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

TaskComponent

結果の値について

例えば`Task<bool>`であればbool型の出力ポートが生成され、返されたbool値をそのポートに出力します。

結果の値にAsyncResultを使用した場合は、設定した成否をTaskComponentの実行結果に使用します。
AsyncResultの場合は、成否に加え出力する値の設定も行えます。

## 作成方法

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

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

- グラフビューのノード作成メニューやコンポーネント選択メニューを開く
- 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を適用することで自動的に移行が行われます。