Unity's standard "Particle System (Shuriken)" is an indispensable tool when creating magic effects for special moves, dust from the character's feet, or roaring bonfires on the field in the game. As development progresses, it is often necessary to increase the overall effect as the character grows larger, or to reduce the Scale of the Transform to match the size when placing a bonfire prefab as a background asset. However, even if you change the Transform Scale of the parent game object to 2x or 0.5x, have you ever faced a display problem where ``the size of the emitted flame or the spread range of smoke does not change at all, and it continues to be emitted at its original size?'' In this article, we will explain the root cause of this particle scale mismatch using the analogy of a "box and fireworks", and explain in detail the correct setting procedure and the differences between the various Scaling Modes.
1. Understanding with an analogy: ``A huge cardboard box and a set of palm-sized fireworks''
To intuitively understand this bug where particles are drawn ignoring the scale of their parent, let's imagine ``A set of palm-sized toy fireworks placed inside a huge cardboard box.''
You are an event director (developer) and you want to put a giant flame effect on the stage, so you prepare a "cardboard box (parent object)" containing assets and stretch it to 10 times its size. Then, open the huge box and activate the effect (particle system) from inside. However, no matter how large the size of the box (Transform Scale) is, if the blueprint (Local settings) of the fireworks inside remains the fixed rule of "emitting sparks in a radius of 50cm", the fireworks will continue to emit sparks at their original size in the middle of the huge box. From the perspective of the audience, we were expecting a flame 10 times the size, but instead there was only a large empty box with a small effect shrinking in the center, making it look extremely uncool.
This is the true nature of 'scale non-tracking bug' in Particle System. Unless a particle system is explicitly instructed to change its own size by multiplying it by the size of its parent box (Hierarchy settings), the effect will completely ignore changes in the parent's Transform and continue operating at its own scale.
2. Root cause: Impact of Scaling Mode setting
In the base module at the top of the Particle System inspector, there is a setting called `Scaling Mode`. This defines the formula that determines the particle size. There are three setting values as shown below, and leaving the default setting (Local) is the cause of the problem.
① Local (applies only local scale/default)
References only the Transform Scale set on the particle's own game object, and ignores any Scale changes of the parent object in the hierarchy. If you make it a prefab and make it a child of another object, it will cause the scale to be incorrect.
② Hierarchy (Full propagation of parent scale/recommended)
Multiplyes the Scale changes of all parent objects, including the parent and its parent's Transform, to completely link and scale its own particle size (emission size, initial velocity, gravity influence, shape size, etc.). This setting is required when placing a production prefab in a scene and adjusting its size.
③ Shape (applies only the scale of the shape's emission shape)
Applies the scale of the parent to the particle emission range (the size of the cone or box in the Shape module), but the size of the individual particle image itself after being emitted is not scaled at all. This is a special mode used when you only want to increase the density or breadth of the entire effect.
3. Step-by-step procedure for solution
Step 1: Switch Scaling Mode to Hierarchy
- Select the game object to which the target Particle System is attached.
- Expand the Particle System main (base) module at the top of the Inspector.
- Click the dropdown for the Scaling Mode property and change it from the default `Local` to Hierarchy.
Step 2: Additional measures when mesh particles are not expanded
If particles are set to emit a 3D model mesh instead of an image (billboard) (Renderer -> Render Mode = Mesh), simply setting `Scaling Mode` to `Hierarchy` may not cause the scale of the mesh to follow correctly. If so, check that the Mesh Scale property of the Renderer module is set to `(1, 1, 1)` and that the vertex stream is set appropriately.
// C# code example when changing the scale from a script
using UnityEngine;
public class EffectScaler : MonoBehaviour
{
public float targetScale = 2.5f;
void Start()
{
// Change the parent Transform scale
transform.localScale = Vector3.one * targetScale;
// If the ScalingMode of all child ParticleSystems is Hierarchy
// The whole will be automatically enlarged by 2.5 times
}
}
4. Scaling Mode application comparison table
| Mode name | Reaction to parent Scale change | Emission shape interlocking | Recommended use case |
|---|---|---|---|
Local |
Not responsive (only own scale) | Not linked | Effects for UI or effects that you want to always display at a constant size regardless of hierarchy. |
Hierarchy |
Fully scales together | Scales together | Character production that dynamically scales during the game, flames and lighting prefabs for stage placement. |
Shape |
The size of the emitted particles does not change | Interlock | For an effect that makes rain or snow fall over a wide area, you want to expand only the rain area but maintain the size of the raindrops. |