# メンバー呼び出し

任意の型のメンバーを呼び出す方法について説明します。

ここでは例としてArborFSMでの使用を想定して解説します。

## InvokeMethod

メソッドの呼び出しや、フィールドやプロパティに値を設定します。

リファレンス : InvokeMethod

### InvokeMethodの追加

- ステートの歯車アイコンをクリックし「挙動追加」を選択。
- 「Events / InvokeMethod」を選択。

### InvokeMethodの設定

- 「Add New Event Type」ボタンをクリックし、呼び出したいタイミングを選択。
- イベントの「＋」アイコンをクリックしてメンバー呼び出しデータを追加。
- 呼び出したい型とメンバーを設定。
  - 型選択ウィンドウ
  - メンバー選択ウィンドウ
- <Target>を設定。
  - UnityオブジェクトであればFlexibleFieldで設定可能。
  - それ以外の型の場合はデータフローからの入力により受付。
  - staticメンバーの場合は設定項目なし。
- 引数の値を設定。

## GetValue演算ノード

フィールドやプロパティの値を取得し、データフローに出力します。

リファレンス : GetValue

### GetValueの追加

- グラフ上を右クリックし、「演算ノード作成」を選択。
- 「Events / GetValue」を選択。

### GetValueの設定

- 型とメンバーを設定。
  - 型選択ウィンドウ
  - メンバー選択ウィンドウ
- <Target>を設定。
  - UnityオブジェクトであればFlexibleFieldで設定可能。
  - それ以外の型の場合はデータフローからの入力により受付。
  - staticメンバーの場合は設定項目なし。
- 値の出力スロットを接続。

## リファクタリング

呼び出す型やメンバーの名前を変更したい場合、RenamedFrom属性を使用して新しい名前を以前の名前と関連付けすることで、参照切れを防げます。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    using UnityEngine;
    using Arbor;

    [RenamedFrom("Player")]
    public class Character : MonoBehaviour
    {
    	[RenamedFrom("TakeDamage")]
    	public void InflictDamage(int damage)
    	{
    		// ...
    	}
    }

以前の名前には名前空間を含める必要があります。
上記の例などグローバル名前空間に定義している場合は必要ありません。

## マネージコードストリッピング

メンバー呼び出しはReflectionを使用して呼び出しているため、マネージコードストリッピングの設定によって呼び出し先メンバーが未使用コードとして削除されてしまう可能性があります。

Preserve属性やlink.xmlファイルを設定して呼び出し先コードが削除されないように設定してください。

詳しくは、Unityマニュアルのマネージコードストリッピングを参照してください。