エンティティ
エンティティとは、シーン内(例: ノード、アセット)またはシーンをまたいで(例: プラグイン)永続するオブジェクトです。Warudoにおけるスクリプティングでは、独自のエンティティ型を定義し、Warudo ランタイムとやり取りします。Warudoが提供する基底クラスを継承することで、独自のエンティティ型を定義できます。
- ノード:
Nodeを継承して、新しいノード型を作成します。ノード型では、データ入力、データ出力、フロー入力、フロー出力、トリガーを定義できます。ノードは、ノードパレットからブループリントエディターへドラッグしてインスタンス化します。ノードのインスタンスはブループリントとともに保存されます。 - アセット:
Assetを継承して、新しいアセット型を作成します。アセット型では、データ入力とトリガーを定義できます。アセットは、アセットを追加メニューを使用してインスタンス化します。アセットのインスタンスはシーンとともに保存されます。 - プラグイン:
Pluginを継承して、新しいプラグイン型を作成します。プラグイン型では、データ入力とトリガーを定義できます。プラグインはWarudoの起動時、またはプラグインのホットリロード時に読み込まれます。プラグイン型ごとにプラグインのインスタンスは1つだけで、データ入力はシーンをまたいで保存されます。 - 構造化データ:
StructuredDataを継承して、新しい構造化データ型を作成します。構造化データは、ノード、アセット、プラグインの「埋め込み」データ入力として使用できる複雑なデータ型です。
初めてのスクリプトを作成するチュートリアルでは、HelloWorldNodeというカスタムノード型と、CookieClickerAssetというカスタムアセット型を作成しました。
エンティティの概念はUnityのMonoBehaviourにある程度似ていますが、より構造化されたアプローチを採用しています。
エンティティがインスタンス化されると、WarudoによってUUID(一意の識別子)が自動的に割り当てられます。これはIdプロパティからアクセスできます。このUUIDはシーン内でエンティティを識別するために使用され、シーンとともに保存されます。
エンティティ型には、通常のC#フィールドとメソッドを含めることができます。ただし、Warudoランタイムと連携するには、エンティティ内にポートとトリガーを作成する必要があります。すべてのエンティティにはデータ入力ポートとトリガーを持たせることができ、ノードにはさらにデータ出力ポート、フロー入力ポート、フロー出力ポートを持たせることができます。


ライフサイクル
エンティティには、複数の段階で構成されるライフサイクルがあります。
OnCreate(): エンティティの作成時に呼び出されます。インスタンスフィールドを初期化したり、イベントを購読したりする場所です。- アセット: ユーザーがシーンに新しいアセットを追加したとき、またはシーンが読み込まれたときに呼び出されます。
- ノード: ユーザーがブループリントに新しいノードを追加したとき、またはシーンが読み込まれたときに呼び出されます。ノードは常にアセットの後に作成されます。
- プラグイン: 起動時にWarudoがプラグインを読み込んだとき、またはプラグインがホットリロードされたときに呼び出されます。
- 構造化データ: 親エンティティが作成されたとき、またはユーザーが構造化データの配列に新しい構造化データを追加したときに呼び出されます。
OnDestroy(): エンティティの破棄時に呼び出されます。リソースを解放する場所です。- アセット: ユーザーがシーンからアセットを削除したとき、またはシーンがアンロードされたときに呼び出されます。
- ノード: ユーザーがブループリントからノードを削除したとき、またはシーンがアンロードされたときに呼び出されます。ノードは常にアセットの後に破棄されます。
Deserialize(TSerialized data): 保存された状態からエンティティがデシリアライズされるときに呼び出されます。たとえば、シーンを開いて読み込んだ直後、アセットでこのメソッドが呼び出されます。通常、このメソッドをオーバーライドする必要はありません。Serialize(): エンティティを保存された状態にシリアライズする必要があるときに呼び出されます。たとえば、シーンを保存しようとするとき、またはエディターに送信する必要があるときに、アセットでこのメソッドが呼び出されます。通常、このメソッドをオーバーライドする必要はありません。
アセット、ノード、プラグインには、追加のライフサイクル段階 があります。
OnUpdate(): エンティティが破棄されていない間、毎フレーム呼び出されます。UnityのUpdate()メソッドに似ています。OnPreUpdate()とOnPostUpdate()も提供されています。これらはそれぞれ、OnUpdate()の前後に呼び出されます。
OnLateUpdate():OnUpdate()の後、毎フレーム呼び出されます。UnityのLateUpdate()メソッドに似ています。OnFixedUpdate(): 固定フレームごとに呼び出されます。UnityのFixedUpdate()メソッドに似ています。OnEndOfFrame(): フレームの終わりに呼び出されます。UnityのWaitForEndOfFrameコルーチンの使用に似ています。OnDrawGizmos(): エンティティがギズモを描画する必要があるときに呼び出されます。UnityのOnDrawGizmos()メソッドに似ています。
更新順序は次のとおりです: プラグイン → アセット → ノード。
これらのライフサイクルメソッドをオーバーライドして、エンティティのカスタム動作を実装できます。た とえば、毎フレーム何かを実行したい場合は、OnUpdate()メソッドをオーバーライドします。