[TIL] Unity - 파티클 시스템

MINO·2024년 6월 12일
0
post-thumbnail

2024-06-12


프로젝트 응용

지난 프로젝트에 차량이 나무, 자동차, 건물 등과 부딪혔을 때, 폭발하거나 연기가 나는 효과를 더해주고 싶었다.

처음에는 애니메이션을 통해 부딪힌 위치에 불이나 연기가 나게 해야할까 생각했지만,
유니티에서 지원하는 파티클 시스템을 통해 해결할 수 있었다.


에셋

Simple Particles FX - Toon Effect 무료 에셋을 활용했다.


결과물

자동차가 부딪히면, Smoke , Explosion , Crash , Fire 4개 중 랜덤으로 파티클이 생성된다.


Particle System

파티클이라고 부르는 매우 작은 이미지, 메시를 시뮬레이션하고 렌더링하여 시각 효과를 부여한다.

파티클 시스템 컴포넌트에 매우 많은 프로퍼티가 있지만,
강의에서 다룬 내용 중 사용될만한 부분만 훑어보기로 하였다.

Unity Docs - Particle System


Main Module

파티클이 움직이는 속도, 크기, 회전, 최대 파티클 수를 정한다.
오른쪽의 토글을 열어 Constant 와 Random Between Two Constant 등을 통해 상수 값과 랜덤한 값을 설정할 수 도 있다.

Property기능
Duration파티클 시스템이 지속되는 시간
Looping파티클 시스템이 끝나면, 다시 재생될지
Start Delay시작하기 전, 기다리는 지연 시간(초)
Start Lifetime파티클의 초기 수명
Start Speed해당 방향으로 작용하는 파티클 초기 속도
Start Size각 파티클의 초기 크기
Start Rotation각 파티클의 초기 회전 각도
Start Color각 파티클의 초기 색상
Simulation SpaceLocal - 부모 오브젝트와 함께 이동 , World - 월드 공간에서 애니메이션 화
Play On Awake활성화하면 오브젝트가 생성될 때, 파티클 시스템이 자동으로 시작

Renderer Module

파티클을 어떻게 보여줄 지를 정의한다.
어떤 파티클을 표현할 지, Order in Layer 는 어떻게 되는지 등을 결정한다.

Property기능
Material파티클을 렌더링하기 위해 사용되는 머터리얼
Order in Layer정렬 레이어의 렌더러 순서

Shape Module

생성되는 모양에 대한 내용을 정의한다.
박스, 콘, 도넛 형태 등 다양한 생성 형태를 정의한다.

각 생성 형태마다 다른 프로퍼티를 가지고 있다.
아래는 Circle 모드로 설정된 경우의 Shape Module 이다.

Property기능
Shape방출되는 모양
Radius모양의 원형 부분의 반지름
Arc전체 원의 각도 비율

Emission Module

파티클이 생성될 1초당 생성량, 움직일 때 생성될 양, 한번에 왕창 생성되는 패턴 등을 정의한다.

Property기능
Rate over Time시간 단위 당 방출되는 파티클 수
Rate over Distance이동한 거리 단위 당 방출되는 파티클 수
Bursts파티클을 생성하는 이벤트, 아래의 5가지 설정을 통해 지정된 시점에 파티클을 방출
Time파티클 시스템이 시작된 이후로 버스트를 방출할 시점을 초 단위로 설정
Count방출되는 파티클 수를 설정
Cycles버스트를 반복할 횟수를 설정
Interval버스트가 반복되는 시간 사이의 간격(초)을 설정
Probability각 버스트 이벤트가 파티클을 생성할 가능성 ( 1.00 이면 100% 로 생성 )

Scrips

화살 투사체가 충돌했을 때, 파티클 시스템이 생성되고 투사체는 사라진다.

이전 프로젝트의 ProjectileController.cs - DestroyProjectile( ) 메서드에
파티클 시스템을 생성하는 코드를 추가해주었다.

private void DestroyProjectile(Vector3 position, bool createFx)
{
	if (createFx)
	{
		ParticleSystem particleSystem = GameManager.Instance.EffectParticle;

		particleSystem.transform.position = position;
		ParticleSystem.EmissionModule em = particleSystem.emission;
		em.SetBurst(0, new ParticleSystem.Burst(0, Mathf.Ceil(attackData.size * 5)));
		ParticleSystem.MainModule mm = particleSystem.main;
		mm.startSpeedMultiplier = attackData.size * 10f;
		particleSystem.Play();
	}
	gameObject.SetActive(false);
}
  • 투사체가 부딪힌 위치 Vector3 position 와 파티클 시스템을 생성할지 여부 bool createFx
  • 파티클 시스템을 투사체가 부딪힌 위치에 생성한다.
  • 파티클 시스템의 EmissionModule 을 통해 버스트 이벤트를 설정한다.
  • 버스트는 0초에 시작하고, attackData.size*5 를 올림한 수만큼의 파티클을 생성한다.

결과물

화살이 오브젝트에 닿으면 노란색 원 파티클이 생성된다.


TIL 마무리

파티클을 직접 만들어보기도, 이미 만들어진 에셋을 통해 파티클을 생성해보기도 하였다.

파티클 시스템을 통해 발자국 남기기, 불이나 연기의 연출, 물이 튀는 듯한 연출 등을 그럴듯하게 표현할 수 있으니, 게임의 완성도를 높이기 위해 적절히 활용하면 좋을 것 같다.

profile
안녕하세요 게임 개발하는 MINO 입니다.

0개의 댓글