コード例 #1
0
        public override void Play(EffectContext context)
        {
            var position = context.GetRequiredFeature <PositionFeature>().Position;
            // Check if color features are present
            var color          = context.GetOptionalFeature <ColorFeature>();
            var gradient       = context.GetOptionalFeature <GradientFeature>();
            var minMaxColor    = context.GetOptionalFeature <MinMaxColorFeature>();
            var minMaxGradient = context.GetOptionalFeature <MinMaxGradientFeature>();

            // If more than one are provided,
            this.CheckIncompatibleFeatures(color, gradient, minMaxColor, minMaxGradient);

            var instance = ParticlePrefab.Clone(position);

            if (color != null)
            {
                SetParticleColor(instance, color.Color);
            }

            if (gradient != null)
            {
                SetParticleColor(instance, gradient.Gradient);
            }

            if (minMaxColor != null)
            {
                SetParticleColor(instance, minMaxColor);
            }

            if (minMaxGradient != null)
            {
                SetParticleColor(instance, minMaxGradient);
            }

            var material = context.GetOptionalFeature <MaterialFeature>();

            if (material != null)
            {
                var renderer = instance.GetComponent <ParticleSystemRenderer>();
                renderer.sharedMaterial = material.Material;
            }

            OnDefaultSetupFinished(instance, context);
            if (!ForceDestroyOnFinished)
            {
                return;
            }

            var main = instance.main;

            main.stopAction = ParticleSystemStopAction.Destroy;
            if (!main.playOnAwake)
            {
                instance.Play();
            }
        }