【Unity】CPU Output Eventを使ってスポーンと同時にスクリプトを実行する

投稿者: | 2021-05-15

「Output Event」コンテキストを使って、スポーンイベントのトリガーと同時にスクリプトを実行してみました。

Output Eventコンテキスト

VFXグラフがバージョン10以上なら、「Output Event」コンテキストが使えるはずです。

これは入力がスポーンイベントで、出力はありません。今回はスポーンコンテキストを、Initializeコンテキストだけでなく、このOutput Eventコンテキストにも接続しました。

スポーンコンテキストでは、インスペクタでSettingsを変更して、2秒のループと1秒の遅延を5回繰り返すようにしました。

Constant Spawn RateブロックのRateの値が16なので、Loop Durationの間は、毎秒16回のスポーンイベントをトリガーします。

スクリプトを追加する

このVFXグラフをアタッチしたVisual Effectオブジェクトに、スクリプトを付けます。

このスクリプトではVFXOutputEventAbstractHandlerクラスを継承します。参考:https://docs.unity3d.com/Packages/com.unity.visualeffectgraph@11.0/manual/OutputEventHandlers.html

namespace UnityEngine.VFX.Utility
{

    public class SpawnCube : VFXOutputEventAbstractHandler
    {

        public override bool canExecuteInEditor => true;

        [SerializeField] GameObject cube;

        static readonly int kPosition = Shader.PropertyToID("position");

        public override void OnVFXOutputEvent(VFXEventAttribute eventAttribute)
        {

            Vector3 position = eventAttribute.GetVector3(kPosition);
            position.y += 8f;
            Instantiate(cube, position, cube.transform.rotation);
        }
    }
}

このクラスでは、canExecuteInEditorプロパティと、OnVFXOutputEventメソッドにabstractキーワードが付いているので、継承したクラスに実装を書く必要があります。

上のようにUnityEngine.VFX.Utility名前空間を定義して、この2つのメンバをオーバーライドするとエラーがなくなりました。

このスクリプトがアタッチされたVisual Effectオブジェクトで、アウトプットイベントがトリガーされたときに、OnVFXOutputEventメソッドが呼ばれます。

上のスクリプトではその時にCubeをインスタンス化しています。引数にイベントアトリビュートが渡されます。

canExecuteInEditorプロパティ

canExecuteInEditorプロパティがtrueだと、エディタでエフェクトが再生されたときにも、OnVFXOutputEventメソッドが呼ばれてCubeが作られるので大変なことになりました。

インスペクタで、canExecuteInEditorのチェックを外すと出なくなりますが、大量のCubeは残るので消しました。

サンプルスクリプト

パッケージマネージャーでVFXOutputEventAbstractHandlerのサンプルスクリプトをインポートできます。

Assetsフォルダに様々な種類のサンプルがインポートされます。

コメントを残す

メールアドレスが公開されることはありません。