6개월 유니티 게임 개발일지 (1) : 파티클에 대해

hipop1109·2025년 12월 30일

매일 어디에든 개발 기록을 넣어두는 것이 꾸준함에 도움이 될 것 같아서 정리해보는 일지

짧게나마 인턴 생활을 하다 보니 개인 개발을 할 때 퀄리티를 올리는 데 가장 효과적이고 잘 보이는 부분이 파티클과 쉐이더 부분이였던 것 같다

그래서 이번에는 파티클과 쉐이더의 기능들을 자세히 파해쳐보고 이를 실전으로 적용해 몇 가지의 파티클과 쉐이더를 실제로 만들어내 하나의 프로젝트로 만들어 포트폴리오에 사용하는 겸 활용해보려고 한다

파티클이란?

한 개의 오브젝트처럼 활용할 수 있는 효과라고 보면 될 듯 하다
조그마한 애니메이션 덩어리 같은 느낌으로 생각하면 될 듯

오브젝트 취급을 하기 때문에 당연히 생성, 제거, 켰다껐다, 풀 활용 등도 가능하다
대신 엄연히 유니티의 기능적인 부분을 활용하기 때문에 파티클 시스템 자체의 여려 함수들도 적절히 활용해야 게임 내에서 자연스럽게 사용하고 매끄럽게 내보낼 수 있다.

보통 무료 에셋 등에서도 파티클은 하나의 부모 파티클 내 다양한 효과를 주는 자식 파티클을 적용해 레이어를 겹치고 각자의 타이밍과 효과들을 적용해 맛있는 파티클을 만들곤 한다

이를 활용해 하나의 파티클 세트를 만들며 파티클을 마스터하는 느낌으로 가보려 한다

우선 프로젝트에서 파티클을 생성해보고 하나씩 파해쳐 보도록 하겠다
기준: 6000.2.6f2


우선 생성하고 가장 먼저 보이는 첫 화면은 이렇게 될 것이다
하나하나 분석하면서 가보도록 하겠습니다

분석하기 전 가시성을 좋게 하기 위해 이미지를 하나 넣고 적용해보도록 하겠다
이미지를 파티클에 넣는 방법은 이미지를 머터리얼화 시켜서 렌더러 내 머터리얼 파일에 넣는 방법이다


이런 식으로 (테스트상 2d로 적용하겠다)
Unlit Default 으로 넣어둔 후


맨 아래 Renderer 탭에있는 Material 탭에 방금 만든 머터리얼을 넣어주면


이런 식으로 나오게 된다

1. duration

말 그대로 지속 시간이다, 아래 looping을 선택하지 않았을 시 duration만큼 재생되고 사라진다

2. looping

무한반복되는지 안되는지에 대한 체크박스

3. prewarm

looping이 켜져있을 때만 켤 수 있는 체크박스로, 싸이클을 한 바퀴 돌린 후 재생하는 개념이다, emission과 관계도 있다
원래 파티클은 시작하면 입자 개수가 점점 많아지면서 효과를 만드는 개념으로 사용되는데, 예를 들어 비나 눈이 오는 효과를 줄 때에는 처음부터 약하다가 강하게 생성되면 어색할 수 있다.
그렇기 때문에 미리 많은 걸 생성해두는 예열 과정을 뜻한다

4. Start Delay

파티클을 켰을 때 시작 딜레이를 주고 그 후에 시작하는 개념
Prewarm과 상충하기 때문에 같이 켤 수 없다

5. Start Lifetime

파티클이 생성된 후 몇 초 후에 사라질지, 말 그대로 라이프타임을 표현

6. Start Speed

각 파티클에 적용될 속도를 조절하는 개념

7. 3D Start Size

2D로 프로젝트를 파면 그냥 Start Size가 나오지만, 3D 프로젝트이기 때문에 3D Start Size로 표현된다
X, Y, Z 크기로 파티클 한 알 자체의 크기를 조절한다

8. Start Size

전체적인 사이즈를 조절해주는 기능

9. 3D Start Rotation

켜면 위 3D Start Size처럼 X, Y, Z 탭이 나온다
똑같이 나올 때 X, Y, Z축을 돌려주는 개념

10. Flip Rotation

0~1까지 조절 가능한 수치
파티클 입자의 일부를 원래 모양의 반대로 회전해서 내보내는 기능
0 : 0%, 1 : 100%, 랜덤으로, 그 사이는 그 확률만큼

11. Start Color

처음 나올 때 색깔을 바꿔주는 탭이다

12. Gravity Source

지금 3D 프로젝트를 파서 생기는 탭이다
3D에서 중력 소스를 가져올건지, 2D에서 가져올건지를 체크한다

13. Gravity Modifier

중력을 적용시켜주는 수치
올라갈수록 방금 중력이 없는 듯이 올라가던 입자들이 중력을 받아 아래로 깔린다
방금 적용한 Start Speed와 부딪혀 작용한다

14. Simulatuon Space

3가지 선택지가 있는데

Local : 오브젝트에 딱 맞춰 방출하는 개념
(붙은 오브젝트가 움직여도 안 쏠리고 그대로 방출됨)

Global : 오브젝트의 방향에 맞춰서 파티클을 방출
(오브젝트가 움직이는 방향대로 쏠려서 발사되는 개념)

Custom : 잘 쓰지는 않지만 사용자 정의 변환에 대해 상대적임

15. Simulation Speed

파티클 입자의 재생 속도를 조절한다
Start Speed와 다른 점은 진짜 시간을 빠르게 돌리는 개념처럼 작용해
1 이상으로 하면 Duration보다 빠르게 파티클 방출이 끝난다

16. Delta Time

Scaled으로 하면 일시정지 시 멈추고
Unscaled으로 하면 일시정지 시에도 멈추지 않는다

17. Scaling Mode

파티클의 전체 크기를 조정하고 싶은데 오브젝트 Scale을 조절해도 변경되지 않는 경우가 있다
이럴 때 활용하는 부분인데 부모의 크기를 변경해서 자식까지 다 변하게 하고 싶을 때 적용하는 방법이다
아직 지식이 부족해 조금 더 알아보고 수정해보겠다

18. Play On Awake

파티클이 활성화되었을 때 바로 작동을 시작하도록 조절하는 탭

19. Emitter Velocity Mode

파티클 입자의 속도를 계산할 때 어떤 것을 기준으로 할 지 결정하는 탭

Transform : 부모 오브젝트의 변화 속도에 따라 작용한다

Rigidbody : Rigidbody의 작용에 따라 계산

Custom : 말 그대로 커스텀

20. Max Particles

파티클을 뱉을 때 한 화면에 적용할 수 있는 최대 파티클 수를 적용

21. Auto Random Speed

파티클이 재생될 때 던지는 효과를 랜덤으로 재생
이 Seed을 끄면 랜덤 스피드가 나오고 Reseed을 누르면 아무 숫자가 뜨는데 이를 누르면 파티클이 항상 일정한 속도로 적용되어 나간다

22. Stop Action

파티클 효과가 끝났을 때 어떻게 처리할 지 적용

None : 아무것도 안함

Disable : 끈다

Destroy : 파괴한다

Callback : Particle System Stopped 콜백을 연결된 스크립트로 전송한다

23. Culling Mode

화면 밖에 나오는 파티클이 작동하는 방식을 결정

Automatic : 자동 처리

Pause and Catch up : 화면에서 벗어나면 시뮬레이션을 중단, 다시 진입하면 정지되지 않았다면 시뮬레이션이 도달해야하는 단계까지 행동을 하기 위해 대규모 단계를 수행성능이 순간적으로 크게 저하될 수 있음.

Pause : 화면을 벗어나면 작동 중단

Always Simulate : 매번 작용시키기

24. Ring Buffer Mode

파티클 입자가 생명 주기를 넘겨도 사라지지 않고 최대 파티클 용량까지 꽉 찰 때까지 유지시킬 지를 결정해주는 탭

Disabled : 수명이 다한 파티클을 제거한다

Pause Until Replaced :수명을 다한 오래된 파티클을 일시정지, Max Particles 한계에 도달하면 시스템에서 재활용해 새 파티클로 다시 표시

Loop Until Replaced : 수명을 다한 파티클이 특정한 수명 비율 지점으로 다시 돌아감, Max Particles 한계에 도달하면 시스템에서 재활용해 새 파티클로 다시 표시

여기까지 일단 기본 탭을 설명해봤는데, 지금은 비주얼적 요소라기보단 프로그램적 조정과 스피드, 크기, 회전 같은 기본 설정에 치중해있다
사실 가장 중요한 미감적 부분들은 아래 부분에 더 많이 적용되어 있으므로 내일 다시 적으면서 설명해보도록 하겠다

profile
쑥쑥 개발자

1개의 댓글

comment-user-thumbnail
2026년 1월 5일

유익해요

답글 달기