データフロー

データフローに関するコードの記述方法について説明します。

データの入出力

データの値を入力するには、InputDataPort<T>を使用します。
データの値を出力するには、OutputDataPort<T>を使用します。

スクリプトの書き方

  • publicもしくはUnityEngine.SerializeFieldを適用したInputDataPort<T>型のフィールドでデータを入力したい要素を宣言します。
  • publicもしくはUnityEngine.SerializeFieldを適用したOutputDataPort<T>型のフィールドでデータを出力したい要素を宣言します。
  • InputDataPort<T>.GetValue()を使用してデータを入力します。
  • OutputDataPort<T>.SetValue(T value)を使用してデータを出力します。

コード例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LogicToolkit;

[System.Serializable]
public class DataFlowExample : ActionComponent
{
    public InputDataPort<int> min;
    public InputDataPort<int> max;
    public OutputDataPort<int> output;

    // OnAction is called when the node is executed.
    protected override void OnAction()
    {
        var minValue = min.GetValue();
        var maxValue = max.GetValue();
        var result = Random.Range(minValue, maxValue);
        output.SetValue(result);
    }
}

この例では、アクションが実行されるたびに、minポートで受け取った値からmaxポートで受け取った値-1までのいずれかの整数値をランダムに出力します。

なお、スクリプトの生成でRandom.Range(int, int)を選択することで同様のスクリプトが作成可能です。

InputField

データの入力については、InputFieldを使用することで、ノード内のフィールドに直接固定値も設定できるようになります。

スクリプトの書き方

  • publicもしくはUnityEngine.SerializeFieldを適用したInputField<T>型のフィールドを宣言します。
  • InputField<T>.valueを使用してデータを入力します。

コード例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LogicToolkit;

[System.Serializable]
public class InputFieldExample : ActionComponent
{
    public InputField<int> min;
    public InputField<int> max;
    public OutputDataPort<int> output;

    // OnAction is called when the node is executed.
    protected override void OnAction()
    {
        var minValue = min.value;
        var maxValue = max.value;
        var result = Random.Range(minValue, maxValue);
        output.SetValue(result);
    }
}

先ほどの例をInputFieldに置き換えた例です。
minフィールドとmaxフィールドは、固定値で設定する方法と入力ポートから受け取る方法を選択できます。

InputFieldの種類

  • InputField<T>
    通常の入力用フィールドです。
    固定値を設定するか、InputDataPort<T>から受け取るかを選択できます。
  • InputGameObject
    GameObjectの入力フィールドです。
    固定値やInputDataPort<GameObject>以外にも、自グラフを実行しているGameObjectを取得するSelf設定があります。
  • InputComponent<T>
    Componentの入力フィールドです。
    固定値やInputDataPort<T>以外にも、自グラフを実行しているGameObjectのコンポーネントを取得するSelf設定と指定したGameObjectからGetComponentするGameObject設定があります。
  • InputQuaternion
    Quaternionの入力フィールドです。
    固定値やInputDataPort<Quaternion>以外にも、オイラー角指定でクォータニオンを取得するEuler設定があります。
  • InputSystemType
    System.Typeの入力フィールドです。
    型名を内部的にシリアライズすることでSystem.Typeの固定値設定に対応しています。