D O C U M E N T A T I O N
UI Particle System - Scripting API
Welcome to the UI Particle System v2.1.2 coding reference. This guide provides comprehensive examples of how to control the particle system entirely via script, using the new TierStudios namespace structure.
NEW NAMESPACE ALERT:
All scripts are now organized under the TierStudios.UIParticleSystem namespace. Please update your using directives as shown in the examples below.
0. Namespace Structure (Updated)
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 settings
emission.emissionRate = 50f;
emission.maxParticles = 1000;
emission.looping = true;
emission.duration = 5f;
emission.startDelay = 0.5f;
// Shape settings
emission.emissionShape = EmissionShapeType.Circle;
emission.circleRadius = 100f;
emission.emitFromEdge = false;
// Direction settings
emission.emissionDirection = Vector2.up;
emission.randomizeDirection = true;
emission.directionVariance = 45f;
// Simulation space
emission.simulationSpace = SimulationSpace.Local;
}
// Add Burst
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()
{
// Lifetime
var lifetime = particleSystem.LifetimeSettings;
lifetime.useRandomLifetime = true;
lifetime.minLifetime = 1f;
lifetime.maxLifetime = 3f;
// Size
var size = particleSystem.SizeSettings;
size.useSizeRange = true;
size.minSize = 20f;
size.maxSize = 80f;
// Size over lifetime
size.useSizeOverLifetime = true;
size.sizeOverLifetime = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f);
// 2D Size Usage
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;
// Simple Color
color.particleColor = Color.red;
// Random between two colors
color.useRandomColors = true;
color.particleColor = Color.yellow;
color.particleColorEnd = Color.red;
// Gradient Usage
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;
// Start Rotation
rotation.useRandomRotation = true;
rotation.minRotation = 0f;
rotation.maxRotation = 360f;
// Rotation Speed
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;
// Enable Velocity Module
velocity.enabled = true;
// Linear velocity
velocity.velocityX = AnimationCurve.Linear(0f, 0f, 1f, 50f);
velocity.velocityY = AnimationCurve.Linear(0f, 100f, 1f, -100f);
// Orbital velocity
velocity.orbitalX = AnimationCurve.Constant(0f, 1f, 45f);
velocity.orbitalY = AnimationCurve.Constant(0f, 1f, 90f);
// Space setting
velocity.space = SimulationSpace.Local;
// Speed modifier
velocity.speedModifier = AnimationCurve.Linear(0f, 1f, 1f, 0.5f);
}
// Apply Gravity Effect
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;
// Enable Attractor
attractor.useAttractor = true;
attractor.attractorType = AttractorType.Attract;
// Target Position
attractor.attractorPosition = attractorTarget.position;
// Strength & Radius
attractor.attractorStrength = 150f;
attractor.attractorRadius = 300f;
// Falloff curve
attractor.attractorFalloff = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f);
// Kill radius
attractor.useKillRadius = true;
attractor.killRadius = 20f;
}
void Update()
{
// Dynamic Update
particleSystem.AttractorSettings.attractorPosition = attractorTarget.position;
}
// Create Vortex
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;
// Enable Noise
noise.useNoise = true;
noise.noiseType = NoiseType.Perlin;
// Settings
noise.noiseStrength = 50f;
noise.noiseFrequency = 1f;
noise.noiseScrollSpeed = 10f;
noise.noiseOctaves = 3;
// Strength over lifetime
noise.useNoiseStrengthOverLifetime = true;
noise.noiseStrengthOverLifetime = AnimationCurve.Linear(0f, 0f, 1f, 1f);
}
// Apply Turbulence
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;
// Enable Trails
trail.useTrails = true;
// Settings
trail.trailLifetime = 0.5f;
trail.trailWidth = 5f;
trail.trailMaxPoints = 20;
trail.trailUpdateInterval = 0.05f;
trail.maxVerticesPerFrame = 1000;
// Color
trail.inheritParticleColor = true;
trail.trailStartColor = Color.white;
trail.trailEndColor = new Color(1f, 1f, 1f, 0f);
// Width curve
trail.trailWidthCurve = AnimationCurve.Linear(0f, 1f, 1f, 0f);
// Material
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;
// Enable
textureSheet.useTextureSheetAnimation = true;
textureSheet.textureSheet = spriteSheet;
// Grid
textureSheet.tilesX = 4;
textureSheet.tilesY = 4;
// Type
textureSheet.animationCycle = AnimationCycle.WholeSheet;
textureSheet.animationFrames = 16;
// Speed & Loop
textureSheet.animationSpeed = 24f;
textureSheet.loopAnimation = true;
// Random Start
textureSheet.randomStartFrame = true;
}
public void PlaySingleRow(int rowIndex)
{
var textureSheet = particleSystem.TextureSheetSettings;
textureSheet.animationCycle = AnimationCycle.SingleRow;
textureSheet.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()
{
// Enable Events
particleSystem.EventSettings.EnableEvents = true;
// C# Action Events
particleSystem.OnParticleSpawned += OnParticleSpawned;
particleSystem.OnParticleDied += OnParticleDied;
// UnityEvents
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
// Activate Mobile Optimization
particleSystem.SetMobileOptimization(
enabled: true,
maxParticles: 50,
updateInterval: 0.033f
);
#endif
}
// Manual Mode
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.
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;
// Modify properties
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()
{
// Emission
var emission = particleSystem.EmissionSettings;
emission.emissionRate = 50f;
emission.maxParticles = 300;
emission.emissionShape = EmissionShapeType.Circle;
// Velocity (NEW)
var velocity = particleSystem.VelocityOverLifetimeSettings;
velocity.enabled = true;
velocity.velocityY = AnimationCurve.Linear(0f, 0f, 1f, -100f);
// Attractor
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
- Emission: Start, Stop, Pause, Resume, Restart controls.
- Settings: Full access to Emission, Lifetime, Size, Color, etc.
- Velocity (New): Orbital velocity, gravity, and speed modifiers.
- Mobile (New): Optimization settings for better performance on Android/iOS.
- Effects: Attractor, Noise, Trail, Texture Sheet Animation.
- Events: Complete C# and UnityEvent system support.