UI Particle System
v2.1.2 — Scripting Reference
Welcome to the UI Particle System scripting reference. This guide provides comprehensive examples of how to control the particle system entirely via script, using the new TierStudios namespace structure.
TierStudios.UIParticleSystem namespace. Please update your using directives as shown in the examples below.0. Namespace Structure
Include these namespaces to access all features.
// Standard Namespace Imports
using TierStudios.UIParticleSystem.Core;
using TierStudios.UIParticleSystem.Settings;
using TierStudios.UIParticleSystem.Managers;
using TierStudios.UIParticleSystem.Utilities;
using TierStudios.UIParticleSystem.Enums;
1. Basic Initialization
How to initialize the system.
using UnityEngine;
using TierStudios.UIParticleSystem.Core;
public class ParticleStarter : MonoBehaviour
{
private UIParticleSystem particleSystem;
void Start()
{
particleSystem = GetComponent<UIParticleSystem>();
particleSystem.StartEmitting();
}
}
2. Emission Control
Methods to start, stop, pause, and restart.
using TierStudios.UIParticleSystem.Core;
using UnityEngine;
public class EmissionController : MonoBehaviour
{
[SerializeField] private UIParticleSystem particleSystem;
public void StartEmission() => particleSystem.StartEmitting();
public void StopEmission() => particleSystem.StopEmitting();
public void PauseEmission() => particleSystem.PauseSystem();
public void ResumeEmission() => particleSystem.ResumeSystem();
public void RestartEmission() => particleSystem.RestartSystem();
public void ClearAllParticles()
{
UIParticleSystem.ClearAllParticles(particleSystem);
}
public int GetActiveCount()
{
return particleSystem.GetActiveParticleCount();
}
}
3. Modifying Emission Settings
Changing emission rates and bursts at runtime.
using TierStudios.UIParticleSystem.Core;
using TierStudios.UIParticleSystem.Settings;
using TierStudios.UIParticleSystem.Enums;
using UnityEngine;
public class EmissionCustomizer : MonoBehaviour
{
[SerializeField] private UIParticleSystem particleSystem;
void Start()
{
var emission = particleSystem.EmissionSettings;
emission.emissionRate = 50f;
emission.maxParticles = 1000;
emission.looping = true;
emission.duration = 5f;
emission.startDelay = 0.5f;
emission.emissionShape = EmissionShapeType.Circle;
emission.circleRadius = 100f;
emission.emitFromEdge = false;
emission.emissionDirection = Vector2.up;
emission.randomizeDirection = true;
emission.directionVariance = 45f;
emission.simulationSpace = SimulationSpace.Local;
}
public void AddExplosion()
{
var burst = new Burst { time = 1f, count = 200, probability = 1f };
particleSystem.EmissionSettings.bursts.Add(burst);
}
}
4. Lifetime and Size Settings
Controlling particle lifespan and scale.
using TierStudios.UIParticleSystem.Core;
using TierStudios.UIParticleSystem.Settings;
using UnityEngine;
public class ParticleAppearance : MonoBehaviour
{
[SerializeField] private UIParticleSystem particleSystem;
void Start()
{
var lifetime = particleSystem.LifetimeSettings;
lifetime.useRandomLifetime = true;
lifetime.minLifetime = 1f;
lifetime.maxLifetime = 3f;
var size = particleSystem.SizeSettings;
size.useSizeRange = true;
size.minSize = 20f;
size.maxSize = 80f;
size.useSizeOverLifetime = true;
size.sizeOverLifetime = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f);
size.use2DSize = true;
size.size2D = new Vector2(50f, 100f);
}
}
5. Color and Gradient
Applying solid colors, random ranges, or gradients.
using TierStudios.UIParticleSystem.Core;
using TierStudios.UIParticleSystem.Settings;
using UnityEngine;
public class ColorController : MonoBehaviour
{
[SerializeField] private UIParticleSystem particleSystem;
void Start()
{
var color = particleSystem.ColorSettings;
color.useRandomColors = true;
color.particleColor = Color.yellow;
color.particleColorEnd = Color.red;
color.useGradientColor = true;
Gradient gradient = new Gradient();
gradient.SetKeys(
new GradientColorKey[] {
new GradientColorKey(Color.white, 0f),
new GradientColorKey(Color.blue, 0.5f),
new GradientColorKey(Color.cyan, 1f)
},
new GradientAlphaKey[] {
new GradientAlphaKey(1f, 0f),
new GradientAlphaKey(0f, 1f)
}
);
color.colorGradient = gradient;
}
}
6. Rotation Settings
Controlling angular velocity and initial rotation.
using TierStudios.UIParticleSystem.Core;
using TierStudios.UIParticleSystem.Settings;
using UnityEngine;
public class RotationController : MonoBehaviour
{
[SerializeField] private UIParticleSystem particleSystem;
void Start()
{
var rotation = particleSystem.RotationSettings;
rotation.useRandomRotation = true;
rotation.minRotation = 0f;
rotation.maxRotation = 360f;
rotation.useRotationOverLifetime = true;
rotation.useRandomRotationSpeed = true;
rotation.minRotationSpeed = -180f;
rotation.maxRotationSpeed = 180f;
}
}
7. Velocity Over Lifetime NEW
Controlling speed, orbital movement, and gravity.
using TierStudios.UIParticleSystem.Core;
using TierStudios.UIParticleSystem.Settings;
using TierStudios.UIParticleSystem.Enums;
using UnityEngine;
public class VelocityController : MonoBehaviour
{
[SerializeField] private UIParticleSystem particleSystem;
void Start()
{
var velocity = particleSystem.VelocityOverLifetimeSettings;
velocity.enabled = true;
velocity.velocityX = AnimationCurve.Linear(0f, 0f, 1f, 50f);
velocity.velocityY = AnimationCurve.Linear(0f, 100f, 1f, -100f);
velocity.orbitalX = AnimationCurve.Constant(0f, 1f, 45f);
velocity.orbitalY = AnimationCurve.Constant(0f, 1f, 90f);
velocity.space = SimulationSpace.Local;
velocity.speedModifier = AnimationCurve.Linear(0f, 1f, 1f, 0.5f);
}
public void ApplyGravity()
{
var velocity = particleSystem.VelocityOverLifetimeSettings;
velocity.enabled = true;
velocity.velocityY = AnimationCurve.Linear(0f, 0f, 1f, -200f);
}
}
8. Attractor System
Creating magnets and vortex effects.
using TierStudios.UIParticleSystem.Core;
using TierStudios.UIParticleSystem.Settings;
using TierStudios.UIParticleSystem.Enums;
using UnityEngine;
public class AttractorController : MonoBehaviour
{
[SerializeField] private UIParticleSystem particleSystem;
[SerializeField] private Transform attractorTarget;
void Start()
{
var attractor = particleSystem.AttractorSettings;
attractor.useAttractor = true;
attractor.attractorType = AttractorType.Attract;
attractor.attractorPosition = attractorTarget.position;
attractor.attractorStrength = 150f;
attractor.attractorRadius = 300f;
attractor.attractorFalloff = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f);
attractor.useKillRadius = true;
attractor.killRadius = 20f;
}
void Update()
{
particleSystem.AttractorSettings.attractorPosition = attractorTarget.position;
}
public void CreateVortex()
{
var attractor = particleSystem.AttractorSettings;
attractor.attractorType = AttractorType.Vortex;
attractor.attractorStrength = 100f;
}
}
9. Noise System
Adding turbulence and organic movement.
using TierStudios.UIParticleSystem.Core;
using TierStudios.UIParticleSystem.Settings;
using TierStudios.UIParticleSystem.Enums;
using UnityEngine;
public class NoiseController : MonoBehaviour
{
[SerializeField] private UIParticleSystem particleSystem;
void Start()
{
var noise = particleSystem.NoiseSettings;
noise.useNoise = true;
noise.noiseType = NoiseType.Perlin;
noise.noiseStrength = 50f;
noise.noiseFrequency = 1f;
noise.noiseScrollSpeed = 10f;
noise.noiseOctaves = 3;
noise.useNoiseStrengthOverLifetime = true;
noise.noiseStrengthOverLifetime = AnimationCurve.Linear(0f, 0f, 1f, 1f);
}
public void ApplyTurbulence()
{
var noise = particleSystem.NoiseSettings;
noise.noiseType = NoiseType.Turbulence;
noise.noiseStrength = 100f;
}
}
10. Trail System
Rendering trails behind particles.
using TierStudios.UIParticleSystem.Core;
using TierStudios.UIParticleSystem.Settings;
using UnityEngine;
public class TrailController : MonoBehaviour
{
[SerializeField] private UIParticleSystem particleSystem;
void Start()
{
var trail = particleSystem.TrailSettings;
trail.useTrails = true;
trail.trailLifetime = 0.5f;
trail.trailWidth = 5f;
trail.trailMaxPoints = 20;
trail.trailUpdateInterval = 0.05f;
trail.maxVerticesPerFrame = 1000;
trail.inheritParticleColor = true;
trail.trailStartColor = Color.white;
trail.trailEndColor = new Color(1f, 1f, 1f, 0f);
trail.trailWidthCurve = AnimationCurve.Linear(0f, 1f, 1f, 0f);
trail.trailMaterial = Resources.Load<Material>("TrailMaterial");
}
public void RefreshTrails()
{
particleSystem.RefreshTrailSettings();
}
}
11. Texture Sheet Animation
Using sprite sheets for animated particles.
using TierStudios.UIParticleSystem.Core;
using TierStudios.UIParticleSystem.Settings;
using TierStudios.UIParticleSystem.Enums;
using UnityEngine;
public class TextureSheetController : MonoBehaviour
{
[SerializeField] private UIParticleSystem particleSystem;
[SerializeField] private Texture2D spriteSheet;
void Start()
{
var textureSheet = particleSystem.TextureSheetSettings;
textureSheet.useTextureSheetAnimation = true;
textureSheet.textureSheet = spriteSheet;
textureSheet.tilesX = 4;
textureSheet.tilesY = 4;
textureSheet.animationCycle = AnimationCycle.WholeSheet;
textureSheet.animationFrames = 16;
textureSheet.animationSpeed = 24f;
textureSheet.loopAnimation = true;
textureSheet.randomStartFrame = true;
}
public void PlaySingleRow(int rowIndex)
{
var ts = particleSystem.TextureSheetSettings;
ts.animationCycle = AnimationCycle.SingleRow;
ts.singleRowIndex = rowIndex;
}
}
12. Event System
Listening to system events (C# & UnityEvents).
using TierStudios.UIParticleSystem.Core;
using TierStudios.UIParticleSystem.Settings;
using UnityEngine;
public class ParticleEventHandler : MonoBehaviour
{
[SerializeField] private UIParticleSystem particleSystem;
void OnEnable()
{
particleSystem.EventSettings.EnableEvents = true;
particleSystem.OnParticleSpawned += OnParticleSpawned;
particleSystem.OnParticleDied += OnParticleDied;
particleSystem.EventSettings.onParticleSpawned.AddListener(OnSpawn);
}
void OnDisable()
{
particleSystem.OnParticleSpawned -= OnParticleSpawned;
particleSystem.OnParticleDied -= OnParticleDied;
}
void OnParticleSpawned(ParticleEventArgs args)
{
Debug.Log($"Particle Spawned! Pos: {args.Particle.position}");
}
void OnParticleDied(ParticleEventArgs args)
{
Debug.Log($"Particle Died! Age: {args.Particle.age}");
}
void OnSpawn(ParticleEventData data)
{
Debug.Log($"UnityEvent Spawn! Index: {data.particleIndex}");
}
}
13. Mobile Optimization NEW
Optimizing performance for mobile devices.
using TierStudios.UIParticleSystem.Core;
using UnityEngine;
public class MobileOptimizer : MonoBehaviour
{
[SerializeField] private UIParticleSystem particleSystem;
void Start()
{
#if UNITY_ANDROID || UNITY_IOS
particleSystem.SetMobileOptimization(
enabled: true,
maxParticles: 50,
updateInterval: 0.033f
);
#endif
}
public void EnableMobileMode()
{
particleSystem.MobileOptimizationMode = true;
particleSystem.MobileMaxParticles = 75;
}
public void CheckPerformance()
{
int effectiveMax = particleSystem.EffectiveMaxParticles;
Debug.Log($"Max Particles: {effectiveMax}");
}
}
14. Direct Particle Manipulation
Modifying active particles at runtime.
using TierStudios.UIParticleSystem.Core;
using System.Collections.Generic;
using UnityEngine;
public class ParticleManipulator : MonoBehaviour
{
[SerializeField] private UIParticleSystem particleSystem;
void Update()
{
List<Particle> particles = particleSystem.ActiveParticles;
foreach (Particle particle in particles)
{
if (particle == null || !particle.isAlive) continue;
particle.position += Vector2.up * Time.deltaTime * 10f;
particle.velocity *= 0.99f;
particle.color = Color.Lerp(particle.color, Color.red, Time.deltaTime);
particle.size += Time.deltaTime * 5f;
particle.rotation += Time.deltaTime * 90f;
}
}
}
15. Complete Example: Dynamic System
A comprehensive example combining multiple features.
using TierStudios.UIParticleSystem.Core;
using TierStudios.UIParticleSystem.Settings;
using TierStudios.UIParticleSystem.Enums;
using UnityEngine;
public class DynamicFeedbackSystem : MonoBehaviour
{
[SerializeField] private UIParticleSystem particleSystem;
[SerializeField] private Transform player;
void Start() { SetupParticleSystem(); }
void SetupParticleSystem()
{
var emission = particleSystem.EmissionSettings;
emission.emissionRate = 50f;
emission.maxParticles = 300;
emission.emissionShape = EmissionShapeType.Circle;
var velocity = particleSystem.VelocityOverLifetimeSettings;
velocity.enabled = true;
velocity.velocityY = AnimationCurve.Linear(0f, 0f, 1f, -100f);
var attractor = particleSystem.AttractorSettings;
attractor.useAttractor = true;
attractor.attractorStrength = 200f;
attractor.attractorPosition = player.position;
particleSystem.StartEmitting();
}
void Update()
{
if (player != null)
particleSystem.AttractorSettings.attractorPosition = player.position;
}
public void TriggerHitEffect(Vector2 hitPosition)
{
var burst = new Burst { time = 0f, count = 100, probability = 1f };
particleSystem.EmissionSettings.bursts.Add(burst);
particleSystem.transform.position = hitPosition;
particleSystem.RestartSystem();
}
}
Summary of Features
Start, Stop, Pause, Resume, Restart controls.
Full access to Emission, Lifetime, Size, Color, etc.
Orbital velocity, gravity, and speed modifiers.
Optimization settings for Android/iOS.
Attractor, Noise, Trail, Texture Sheet Animation.
Complete C# and UnityEvent system support.