# IReleaseReceiver

グラフが解放される際に呼び出すメソッドを実装できます。
Logic Graphの場合は、グラフの再生状況とは無関係でありグラフオブジェクトが破棄される際に呼ばれる点にご注意ください。
関数グラフの場合は、同じノードで同じ関数グラフを繰り返し実行する場合でも再生終了後に毎回呼ばれる点にご注意ください。

## スクリプトの書き方

- `LogicToolkit.IReleaseReceiver`を各種NodeComponentを継承した型に実装する。
- `public void OnRelease()`を実装する。

## コード例

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using LogicToolkit;

    [System.Serializable]
    public class ReleaseExample : ActionComponent, IReleaseReceiver
    {
        [SerializeField]
        private GameObject prefab;

        [SerializeField]
        private OutputDataPort<GameObject> output;

        private GameObject instance;

        protected override void OnAction()
        {
            if (instance == null)
            {
                instance = Object.Instantiate(prefab);
            }

            output.SetValue(instance);
        }

        public void OnRelease()
        {
            if (instance != null)
            {
                Object.Destroy(instance);
                instance = null;
            }
        }
    }

この例では、実行時にプレハブを一度だけ実体化し、解放時に実体化したオブジェクトも破棄しています。