docs.unity3d.com
    目次を表示する/隠す

    Single/Periodic Burst

    メニューパス:

    • Spawn > Single Burst
    • Spawn > Periodic Burst

    Single/Periodic Burst Block は、パーティクルを即時に 1 回、または遅延を使って周期的に発生させます。このブロックがパーティクルの発生をトリガーすると、瞬時に spawnCount を増加させます。Repeat 設定を Periodic に変更すると、このブロックの名前が Periodic Burst に変わり、遅延の後でパーティクルを発生するようになります。

    ブロックの互換性

    このブロックは、以下のコンテキストと互換性があります。

    • Spawn

    ブロックの設定

    設定 Type 説明
    Repeat Enum (Inspector) 発生を 1 回のみにするか、または遅延の後で繰り返すかを決定するために、このブロックが使うモードです。オプションは以下の通りです。
    • Single: ブロックはパーティクルを 1 回発生させます。
    • Periodic: ブロックはパーティクルを複数回発生させます。一度パーティクルを発生させた後、Delay で指定した時間だけ待ってから、再び発生させます。
    Spawn Mode Enum 発生させるパーティクルの数を決定するために、このブロックが使うモードです。オプションは以下の通りです。
    • Constant: ブロックは一定数のパーティクルを発生させます。数は Count プロパティで設定します。
    • Random: ブロックは 2 つの境界間のランダムな数のパーティクルを発生させます。このモードを選択すると、Count プロパティは、x-軸 と y-軸がそれぞれの境界値を示す Vector 2 になります。
    Delay Mode Enum バースト間の遅延時間の計算方法を決定するために、このブロックが使うモードです。オプションは以下の通りです。
    • Constant: 遅延時間は一定の期間になります。期間は Delay プロパティで設定します。
    • Random: 遅延時間は 2 つの境界間のランダムな時間になります。このモードを選択すると、Delay プロパティは、x-軸 と y-軸がそれぞれの境界値を示す Vector 2 になります。

    ブロックのプロパティ

    入力 Type 説明
    count float/Vector2 発生させるパーティクルの数です。
    Spawn Mode を Constant に設定する場合、このプロパティは float タイプで、設定する値は発生させたいパーティクルの特定数です。
    Spawn Mode を Random に設定すると、このプロパティは、x-軸 と y-軸がそれぞれの境界値を示す Vector 2 になります。パーティクルが発生する際、ブロックはこの 2 つの値の間のランダムな数字を使って、発生させるパーティクルの数を決定します。
    Delay float/Vector2 ブロックがパーティクルを発生させる前に待つ、遅延時間です。
    Delay Mode を Constant に設定する場合、このプロパティは float タイプで、設定する値はブロックがパーティクル発生間に待機する、遅延時間です。
    Delay Mode を Random に設定すると、このプロパティは、x-軸 と y-軸がそれぞれの境界値を示す Vector 2 になります。ブロックが遅延を開始する際、ブロックはこの 2 つの値の間のランダムな数字を使って、遅延を開始します。

    注意

    シングルバーストの動作は、以下にあげる同等のカスタムスポーナーコールバックの実装で模倣することができます。

    class SingleBurstEquivalent : VFXSpawnerCallbacks
    {
        public class InputProperties
        {
            public float Count = 1.0f;
            public float Delay = 2.0f;
        }
    
        static private readonly int countID = Shader.PropertyToID("Count");
        static private readonly int delayID = Shader.PropertyToID("Delay");
    
        public sealed override void OnPlay(VFXSpawnerState state, VFXExpressionValues vfxValues, VisualEffect vfxComponent)
        {
        }
    
        private float m_NextBurstTime;
        private bool m_Sleeping;
    
        public sealed override void OnUpdate(VFXSpawnerState state, VFXExpressionValues vfxValues, VisualEffect vfxComponent)
        {
            if (state.newLoop)
            {
                m_NextBurstTime = vfxValues.GetFloat(delayID);
                m_Sleeping = false;
            }
    
            if (!m_Sleeping && state.playing && state.totalTime >= m_NextBurstTime)
            {
                state.spawnCount += vfxValues.GetFloat(countID);
                m_Sleeping = true;
            }
        }
    
        public sealed override void OnStop(VFXSpawnerState state, VFXExpressionValues vfxValues, VisualEffect vfxComponent)
        {
        }
    }
    

    ピリオディックバーストの動作は、以下にあげる同等のカスタムスポーナーコールバックの実装で模倣することができます。

    class PeriodicBurstEquivalent : VFXSpawnerCallbacks
    {
        public class InputProperties
        {
            public float Count = 1.0f;
            public float Delay = 2.0f;
        }
    
        static private readonly int countID = Shader.PropertyToID("Count");
        static private readonly int delayID = Shader.PropertyToID("Delay");
    
        public sealed override void OnPlay(VFXSpawnerState state, VFXExpressionValues vfxValues, VisualEffect vfxComponent)
        {
        }
    
        private float m_NextBurstTime;
    
        public sealed override void OnUpdate(VFXSpawnerState state, VFXExpressionValues vfxValues, VisualEffect vfxComponent)
        {
            if (state.newLoop)
            {
                m_NextBurstTime = vfxValues.GetFloat(delayID);
            }
    
            if (state.playing && state.totalTime >= m_NextBurstTime)
            {
                m_NextBurstTime += vfxValues.GetFloat(delayID);
                state.spawnCount += vfxValues.GetFloat(countID);
            }
        }
    
        public sealed override void OnStop(VFXSpawnerState state, VFXExpressionValues vfxValues, VisualEffect vfxComponent)
        {
        }
    }
    
    トップに戻る
    Copyright © 2023 Unity Technologies — 商標と利用規約
    • 法律関連
    • プライバシーポリシー
    • クッキー
    • 私の個人情報を販売または共有しない
    • Your Privacy Choices (Cookie Settings)