Skip to main content

✨ Lesson 7.4: Adding Polish — Particles & Post-Processing

The difference between "a tech demo" and "a game" is often juice — the little bursts, glows, and effects that make actions feel great. Let's add a particle pop on collect and give the whole scene a richer look with post-processing.

🎯 Learning Objectives

  • Create a Particle System and play a burst on an event
  • Spawn an effect with Instantiate when a star is collected
  • Add a URP Volume with Bloom and Vignette
  • Understand why post-processing lifts the whole look

Estimated Time: 40 minutes

In This Lesson

What Is "Juice"?

Juice is the collection of small, non-essential feedback effects that make a game feel responsive and alive — a sparkle when you grab a coin, a screen that gently glows, a little sound. None of it changes the rules; all of it changes the feel. Our arena already looks tidy; polish makes it pop:

A real Unity render of the mini-game arena with player and collectible stars.
Figure 1: The arena (real render). We'll add sparkle bursts on pickup and a subtle post-processing glow over everything.

A Collect Particle Burst

A Particle System spawns lots of tiny sprites — sparks, smoke, confetti. We'll make a quick one-shot burst:

  1. Add one via GameObject ▸ Effects ▸ Particle System.
  2. In the Inspector, set the main module's Duration ≈ 0.5, untick Looping, and set Start Lifetime ≈ 0.5.
  3. Open the Emission module → add a Burst of ~20 particles at time 0.
  4. Set Shape to Sphere and give Start Color a bright yellow.
  5. Save it as a prefab named CollectFX.

📖 Definition

Particle System: a component that emits and animates many small particles at once — ideal for sparks, dust, fire, magic, and pickup bursts. A non-looping one with a burst makes a perfect one-shot effect.

Spawning It on Collect

When a star is collected, create the effect at the star's position with Instantiate, just before destroying the star:

public GameObject collectFX;    // drag the CollectFX prefab here

void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Player"))
    {
        // spawn the burst where the star was
        if (collectFX != null)
            Instantiate(collectFX, transform.position, Quaternion.identity);

        GameManager gm = FindObjectOfType<GameManager>();
        if (gm != null) gm.AddPoint();

        Destroy(gameObject);
    }
}

📖 Definition

Instantiate(prefab, position, rotation): creates a fresh copy of a prefab in the scene at runtime. It's how games spawn bullets, enemies, effects — anything that appears while playing.

💡 Self-cleaning effects: tick Stop Action → Destroy on the Particle System (or add a tiny script that Destroys it after a second) so spent bursts don't pile up in the Hierarchy.

Post-Processing with a Volume

Post-processing applies full-screen image effects after the scene is rendered — like Instagram filters for your game. In URP it lives on a Volume:

  1. Add GameObject ▸ Volume ▸ Global Volume.
  2. On its Volume component, click New to create a Profile.
  3. Click Add Override and add Bloom — enable Intensity (~0.5) so bright things gently glow.
  4. Add another override, Vignette — a subtle dark edge that focuses the eye (Intensity ~0.3).
  5. Make sure the Main Camera has Post Processing ticked (in its Camera component).

⚠️ Nothing changed?

Two usual causes: the camera's Post Processing checkbox is off, or the Volume isn't Global (a local volume only affects the camera inside its collider). Tick Post Processing and use a Global volume.

✅ Pro Tip: subtle wins

Post-processing is easy to overdo. A little Bloom and Vignette lifts a scene; too much drowns it. Nudge values gently and compare with the effect on and off.

Hands-on Exercise

🏋️ Exercise: Make it pop

  1. Build the CollectFX burst prefab.
  2. Wire it into the Collectible's collectFX slot and confirm a burst appears on pickup.
  3. Add a Global Volume with Bloom and Vignette; enable Post Processing on the camera.
  4. Play with the effects on, then temporarily disable the Volume to feel the difference.
  5. Combine with the collect sound from Module 6 — burst + ding together feels fantastic.
💡 No burst appears

Check the collectFX prefab is assigned on the collectible, that its Particle System has a Burst (not just looping emission), and that it isn't destroyed before it plays.

🎯 Quick Quiz

Question 1: What does Instantiate do?

Question 2: Post-processing (Bloom, Vignette) in URP is added via a…

Summary

🎉 Key Takeaways

  • Juice = small feedback effects that make actions feel great.
  • A non-looping Particle System with a burst makes a one-shot pickup effect.
  • Instantiate spawns a prefab at runtime — spawn the burst on collect.
  • A URP Volume with Bloom + Vignette lifts the whole look (camera Post Processing on).

🚀 What's Next?

Your mini-game is complete and juicy! In Module 8 we tidy the project and — the big moment — build it into a real game file you can share.

🎉 Module 7 complete — you built a game!

Level, player, pickups, score, win/lose, particles, and glow. That's a full game loop.