핵심 정리
| 항목 | 내용 |
|---|---|
| 역할 | 입자 생성, 수명, 속도, 색, 크기, 방출 방식과 렌더링을 모듈 단위로 제어 |
| 언제 쓰는가 | 폭발, 연기, 히트 이펙트, 먼지, 마법, UI 파티클 연출을 만들 때 |
| 기준 버전 | Unity 6.5 (6000.5) |
| 핵심 Inspector | Main, Emission, Shape, Velocity over Lifetime, Color over Lifetime, Size over Lifetime, Renderer |
| 자주 연결되는 API | Play, Stop, Clear, main, emission, shape, isPlaying |
Inspector 설정
| 설정값 | 언제 바꾸는가 | 잘못 맞추면 생기는 문제 |
|---|---|---|
Main Duration, Looping, Play On Awake | 한 번 터질지, 계속 돌지, 시작 즉시 재생할지 정할 때 | 풀링 효과가 미리 켜지거나 일회성 효과가 반복됨 |
Main Start Lifetime, Start Speed, Start Size, Start Color | 기본 입자 성격을 정할 때 | 양은 맞는데 타이밍과 체감이 전혀 다름 |
Simulation Space | 이펙트가 오브젝트를 따라갈지 월드에 남을지 정할 때 | 총구 불꽃이 뒤에 남거나 연기 구름이 같이 이동 |
| Emission | 초당 생성량과 Burst 타이밍을 정할 때 | 한 번만 터져야 하는데 계속 뿜거나 반대 상황이 생김 |
| Shape | 어디서 어떤 방향으로 방출할지 정할 때 | 텍스처보다도 이펙트 실루엣이 어색해짐 |
| Color/Size/Velocity over Lifetime | 시간에 따른 사라짐과 퍼짐을 만들 때 | 시작값만 맞고 진행 중 느낌이 죽어 있음 |
| Renderer | 머티리얼, 정렬, 렌더 모드를 정할 때 | 입자가 배경 뒤로 숨거나 과도하게 겹쳐 보임 |
Main
Main은 거의 모든 이펙트의 기본 성격을 정합니다. Duration, Looping, Start Lifetime, Start Speed, Start Size, Start Color, Gravity Modifier, Simulation Space, Scaling Mode, Max Particles, Play On Awake를 가장 자주 봅니다.
Simulation Space가 Local이면 발사체에 붙어서 따라가고, World면 생성 후 월드에 남습니다. 이 값 하나로 "총구 불꽃이 총을 따라다니는지", "연기 구름이 공간에 남는지"가 갈립니다.
| 값 | 언제 고르는가 | 주의할 점 |
|---|---|---|
Simulation Space = Local | 총구 불꽃, 엔진 배기처럼 오브젝트를 따라가야 할 때 | 이미 퍼진 연기까지 같이 끌려가 보일 수 있음 |
Simulation Space = World | 폭발 잔광, 연기 구름처럼 생성 후 공간에 남아야 할 때 | 발사체에 붙어 있어야 하는 이펙트는 분리되어 떠 보일 수 있음 |
Simulation Space = Custom | 특정 본이나 별도 기준 Transform을 따라야 할 때 | 기준 Transform 관리가 복잡해질 수 있음 |
Scaling Mode = Hierarchy | 부모 스케일까지 포함해 통째로 비율을 맞추고 싶을 때 | 부모 스케일 변화에 과하게 영향받을 수 있음 |
Scaling Mode = Local | 파티클 자신의 스케일만 안정적으로 쓰고 싶을 때 | 부모 크기를 바꿔도 기대한 만큼 같이 커지지 않을 수 있음 |
Scaling Mode = Shape | 방출 영역만 키우고 입자 자체 크기는 유지하고 싶을 때 | Shape와 Start Size 체감이 분리되어 초반엔 헷갈리기 쉬움 |
Emission, Shape
Emission은 얼마나 많이 뿜을지, Shape는 어디서 어떤 방향으로 뿜을지를 정합니다. Rate over Time은 지속 분사, Bursts는 한 번에 터지는 연출에 가깝습니다.
Shape를 Cone으로 둘지 Sphere로 둘지, Arc와 Radius를 어떻게 잡을지에 따라 같은 입자 수여도 전혀 다른 이펙트가 됩니다. "양은 맞는데 느낌이 안 맞다"면 텍스처보다 Shape부터 보는 편이 빠릅니다.
Lifetime 변화와 Renderer
Color/Size/Velocity over Lifetime은 시간이 지나며 변하는 성질입니다. 시작값만으로는 만들기 어려운 사라짐, 퍼짐, 감쇠 느낌을 이 모듈들이 담당합니다. Renderer는 어떤 머티리얼과 정렬 방식으로 보일지를 정합니다.
알파 블렌드, 정렬, 소팅 문제는 파티클 자체보다 Renderer와 머티리얼 설정이 원인인 경우가 많습니다.
스크립트 연결
| 필드/프로퍼티 | 언제 읽거나 쓰는가 | 주의할 점 |
|---|---|---|
main | 수명, 속도, 색 같은 기본 모듈 값을 바꿀 때 | 구조체처럼 받아와 다시 할당하는 패턴 이해 필요 |
emission | 생성량, Burst 조절 | 이펙트 성격이 크게 바뀜 |
shape | 방출 방향과 반경을 동적으로 바꿀 때 | 로컬 축 기준인지 같이 봐야 함 |
isPlaying | 재생 상태 확인 | 서브 이미터와 체감이 다를 수 있음 |
| 메서드 | 언제 쓰는가 | 연결 지점 |
|---|---|---|
Play() | 이펙트를 시작할 때 | 히트, 발사, 스폰 |
Stop() | 즉시 멈추거나 자연 종료시킬 때 | 상태 종료, 오브젝트 반환 |
Clear() | 남아 있는 입자를 비워야 할 때 | 풀링 재사용 직전 |
Simulate() | 툴성 미리보기나 특정 시간 건너뛰기 | 에디터 툴, 디버그 |
파티클은 모듈을 구조체처럼 가져와 값만 수정하는 패턴이 기본입니다.
Stop() 종료 방식
| 값 | 언제 고르는가 | 결과 |
|---|---|---|
ParticleSystemStopBehavior.StopEmitting | 새 입자만 끊고 이미 나온 입자는 자연스럽게 사라지게 할 때 | 연기, 불꽃, 오오라 종료가 부드럽다 |
ParticleSystemStopBehavior.StopEmittingAndClear | 즉시 화면에서 완전히 비워야 할 때 | 풀링 복귀, 순간 리셋에 적합하지만 연출은 끊겨 보일 수 있음 |
using UnityEngine;
public class HitEffect : MonoBehaviour
{
[SerializeField] private ParticleSystem particles;
public void PlayWithColor(Color color)
{
var main = particles.main;
main.startColor = color;
particles.Play();
}
}일회성 이펙트는 Play/Stop, 무기 상태나 환경 변화에 따라 양을 조절할 때는 emission.rateOverTime, 색 조정은 main.startColor가 흔한 연결 지점입니다.
자주 틀리는 부분
Play On Awake가 켜져 있어 풀링된 이펙트가 스폰 직후 의도 없이 재생될 수 있습니다.Simulation Space를 잘못 두면 이펙트가 총구를 따라다니거나, 반대로 제자리에 남아야 할 것이 같이 움직입니다.- Burst와 Loop를 동시에 대충 섞어 "왜 한 번만 안 터지지" 같은 상태가 생길 수 있습니다.
- Renderer 정렬과 머티리얼 블렌딩을 안 보면 입자 수보다 더 큰 시각 문제가 생깁니다.
관련 컴포넌트
Light, Audio Source, Animator, Camera, Shader Graph property, keyword, material 제어
참고 링크
2 sources