자료 관리

파티클 시스템 - 1 (메인 모듈)

noc777 2024. 12. 3. 21:03
더보기

파티클 시스템은 여러 특수효과나 애니메이션 연출을 넣어주고 싶을 때 사용되는 컴포넌트다.

이번 프로젝트에서 촛불을 구현하기 위해서는 해당 시스템에 대한 이해가 필요한데 그래서 기능들에 

관해 정리해보는 시간을 가진다.

 

프로퍼티

 

메인 모듈(main or partice system module)

가장 먼저 보이는 Particle System이라고 명시되어있는 칸의 옵션들이다.

이 모듈엔 공식문서상 파티클 시스템 전체에 영향을 미치는 프로퍼티가 배치되어있다.

 

이 모듈은 컴포넌트의 일부이며 다른 모듈들 같은 경우 체크로 비활성화가 가능하지만

이 모듈은 새로 생성할 때 기본적으로 활성화되어 있는 옵션으로 보면될 것 같다.

 

 

Duration : 파티클의 지속시간 

Looping을 끄고 5초로 설정해서 사용해본다면 실행되고 나서 5초후에 꺼져서 서서히 사라지는 것을 볼 수 있다.

 

Looping : 파티클의 반복 여부

이 옵션을 활성화하면 Duration의 한도가 끝나더라도 다시 시작되어 임의로 꺼줄 때까지 반복한다.

 

Prewarm : 시작할 때 파티클 입자의 방출량을 최대치로 설정

시스템이 전체 주기를 한번 완료한 것처럼 초기화라고 공식문서에서는 설명한다.

옵션을 켜봤을 때 기존 상태에선 서서히 방출되는 파티클의 수가 늘어나지만 

이 상태에선 처음부터 최대치로 나오는 것을 확인했다.

Looping이 활성화되어 있을 때만 사용이 가능하다.

 

Start Delay : 파티클의 시작 대기시간 

파티클이 실행되었을 때 지연시간(초)을 부여한다. 

설정된 시간이 지난 후에 파티클이 비로스 방출되기 시작한다.

Prewarm이 활성화되어 있으면 사용할 수 없다.

 

Start Lifetime : 파티클 입자의 수명 (초 단위)

파티클의 수명 즉 파티클 오브젝트가 유지되는 시간을 말한다. 

옵션을 활성화하였을 때 수명이 늘어나서 기존보다 멀리 날아가는 것을 확인했다.

왜 초기라는 수식어가 붙어있는지는 좀 더 알아보고 나서 수정하자.

 

Start Speed : 파티클 입자의 속도

방출된 파티클의 이동 속도다. 숫자가 높을수록 파티클 오브젝트가 빠르게 움직이는 것을 확인할 수 있었다.

 

Start Size : 파티클 입자의 크기

파티클 오브젝트의 초기 크기이다. 기본적으로 값이 커지면 균등하게 커진다.

3D Start Size가 켜져있으면 x,y,z 별로 크기를 조절할 수 있다.

 

Start Rotation : 파티클의 입자의 회전 각도

파티클 오브젝트의 회전 각도다.  기본적으로 z축을 돌린다.

3D Start Rotation이 켜져있으면 x,y,z 별로 회전을 조절할 수 있다.

 

Flip Rotation : 회전 반전 옵션

0~1 까지의 값을 넣을 수 있다.

0으로 설정되어 있으면 기존의 회전 방향이고 1로 설정되어 있으면 반전되어 회전된다.

사이의 값이면 비율에 따라 기존 회전 방향과 반전된 회전 방향의 입자가 섞여서 나온다.

 

Start Color : 파티클 입자의 색상

파티클 오브젝트의 색상을 조작한다.

이미지를 넣어 사용할 경우엔 적용되지 않는다고 한다.

 

Gravity Modifier : 파티클 입자에 중력 부여

여기에 값을 부여하면 파티클이 나올 때 중력의 영향을 받는다.

0보다 큰값을 넣으면 아래로 중력이 작용하고 작은 값을 넣으면 위로 중력이 작용한다.

기본적으로는 0으로 되어있어 중력 영향을 받지 않고 있다.

 

Simulation Space : 애니메이션이 발생하는 위치를 정하는 옵션

Local : 부모 오브젝트의 좌표를 기준으로 애니메이션이 발생하게 하고 싶을 때 선택

World : 월드 스페이스 즉 월드 상의 절대 좌표계를 기준으로 애니메이션이 발생하게 하고 싶을 때 선택

Custom : 선택한 오브젝트 (옵션을 선택하면 오브젝트를 넣는 칸이 생긴다) 를 기준으로

애니메이션이 발생하게 하고 싶을 때 선택

 

접은 글은 혹시나 로컬과 월드가 헷갈릴 때 보는 것

더보기

일단 로컬 좌표계와 월드 좌표계에 대해 잊어버렸을 때를 대비해 간략하게 설명하자면

 

월드 좌표계 : 게임상 절대적인 좌표값이다.

우리가 transform 리셋을 통해 최상위계층의 오브젝트를 0,0,0으로 설정하는 것도 월드 좌표계를 기준으로 하는 것이다. 

즉 게임 공간 상의 위치를 말하는 것이 World다. 

실제로 World로 설정해놓고 파티클 시스템을 작동시키면

부모 오브젝트를 옮기면 이미 방출된 오브젝트는 월드상에 남아있는 것을 확인할 수 있다.

 

로컬 좌표계 : 오브젝트 안의 또다른 좌표.

부모 오브젝트를 기준점 삼아서 거기서 좌표를 추가로 재설정한다.  

Local 로 설정해놓고 파티클 시스템을 작동시키면

이미 방출된 오브젝트 또한 같이 따라가는 것을 확인할 수 있다.

Simulation Speed : 파티클 시스템 배속

초당 방출되는 속도를 배속시키는 기능이다.

값을 1보다 크게해보면 배속이 적용되며 0이하면 출력이 되지 않는다.

 

Delta Time : 파티클 시스템이 Time Scale의 영향을 받는지를 정한다.

Scale : Time Scale의 영향을 받아 일시정지가 되었을 때 같이 정지한다.

UnScale : 일시정지가 되어도 정지하지 않는다.

 

접은 글은 TimeScale 관련 내용

더보기

DeltaTime : 컴퓨터의 프레임 크기 값

기기의 성능에 따라 프레임이 다르므로 Update문처럼 프레임당 한 번 호출되는 경우에 

처리되는 동작의 횟수가 제각각일 수밖에 없다.

DeltaTime을 곱해주면 컴퓨터 프레임 크기만큼 곱해줌으로서

이 프레임을 균일하게 보정해주는 역할을 한다.

예를 들어 초당 프레임이 10인 pc는 10분의 1을 곱해주고 20인 pc는 20분의 1을 곱해주어

똑같은 1로 만드는 것과 같은 원리다.

 

Time Scale : DeltaTime에 곱해지는 값이다. 

TimeScale이 0일 땐 DeltaTime이 곱해지는 모든 것이 멈추기에

화면이 멈추는 것처럼 생각되는 것이다.

Scaling Mode : 파티클 시스템의 Transform Scale 설정

Local : 파티클 시스템이 자기 자신 고유한 Scale를 갖게 된다.

Hirerarchy : 부모 오브젝트의 스케일 값을 토대로 Scale을 설정한다. (방출되는 파티클 또한 적용)

Shape : 부모 오브젝트의 스케일 값을 토대로 Scale을 설정하되 방출되는 파티클은 고유한 Scale을 가진다.

왼쪽 부터 Local,Hirerarchy,Shape

예시 자료를 통해 보면

Local은 길쭉한 부모 오브젝트의 Scale의 영향을 받지 않았다. 

Hirerarchy는 길쭉한 부모 오브젝트의 Scale의 영향을 받아 원뿔형 범위가 y축으로 길어지고 x축은 줄어들었다.

파티클 또한 마찬가지

Shape는 원뿔형 범위는 영향을 받았지만 파티클은 Local과 같게 정상적으로 나오고 있다.

 

 

Play On Awake : 활성화 될 때 파티클 자동 실행

오브젝트가 활성화될 때 자동으로 실행된다. 

 

Emitter Velocity : 파티클의 시스템의 속도 계산 방법

Rigidbody ( 컴포넌트가 있을 때) 로 계산할건지 Transform 으로 계산할건지 설정

이외에도 Custom 옵션이 존재

 

Max Particles : 최대 파티클 입자의 한도

방출되는 파티클의 한도 

한도를 넘어가면 추가로 방출되는 파티클은 제거되어 방출이 멈추게 되고 

파티클의 수명이 다해야 비로소 다시 방출된다.

 

Random Seed : 파티클 입자의 방출 패턴 설정

Auto Random Seed 가 비활성화 되어있을 때만 활성화된다.

고유한 시드를 통해 방출이 항상 일정하게 발생하도록 한다.

Reseed 버튼 클릭 시 랜덤으로 고유 시드를 설정해준다.

 

Auto Random Seed : 자동으로 파티클 방출 패턴을 설정

이 설정을 활성화하였을 때는 실행될 때마다 파티클이 방출되는 것이 다르게 발생한다.

 

Stop Action : 파티클이 끝났을 때 처리 방식

None : 효과 없음

Disable : 파티클 시스템이 끝나면 파티클 오브젝트를 비활성화

Destroy : 파티클 시스템이 끝나면 파티클 오브젝트를 파괴

CallBack : 파티클 시스템이 끝난 후 특정 콜백 메서드를 호출

 

아래는 콜백 처리 방식 때 예시

//파티클이 종료될 때 호출할 메서드
private void OnParticleSystemStopped(ParticleSystem ps)
{
     Debug.Log("파티클 시스템이 종료되었습니다.");

     // 필요한 추가 작업
}

//내장된 이벤트 사용
particleSystem.stopped += OnParticleSystemStopped;


//만약 게임오브젝트를 파괴할 일이 생기면 OnDestroy에서 구독을 해제하여 메모리 누수를 방지하는 것이 좋다.
private void OnDestroy()
{
   if(particleSystem != null)
   {
      particleSystem.stopped -= OnParticleSystemStopped;
   }

}

 

Culling Mode : 카메라 시야 밖의 파티클 입자의 시뮬레이션 지속 여부

 

AutoMatic : 게임 화면 상에서 보이지 않을 때 자동으로 랜더링 중지 (최적화)

 

Pause and Catch Up : 화면 상에서 보이지 않으면 일시 중지하고 보일 때 이어서 랜더링

 

Pause and Clear : 화면 상에서 보이지 않으면 일시 중지하고 보일 때 기존 파티클 입자를 제거하고 새로 시작

 

Always Simulate : 화면 상에서 안보여도 계속 랜더링

 

Ring Buffer Mode : 파티클 입자의 최대한도에 도달할 때까지 수명연장 및 입자 재활용

더보기

앞서 Max Particles 의 한도에 도달할 때까지 파티클을 계속 활성화하는 옵션.

한도에 도달해야 Start Life Time의 초가 작동한다.

수명에 다한 파티클은 제거되는 것이 아니라

가장 오래된 파티클을 재활용하여 새로 파티클을 생성한다. (오브젝트 풀링)

 

Disabled : 옵션을 꺼두어 수명이 다한 파티클을 제거하도록 한다. 

 

Pause Until Replaced : 수명이 다한 파티클을 일시정지 하였다가

Max Particle 한도에 도달하면 가장 오래된 파티클을 재활용하여 새로 표시하게 한다.

 

Loop Until Replaced : 수명을 다한 파티클이 특정한 수명 비율 지점으로 다시 돌아감

Max Particle 한도에 도달하면 가장 오래된 파티클을 재활용하여 새로 표시되게 한다

 

 

 

 

'자료 관리' 카테고리의 다른 글

직렬화(유니티)  (0) 2024.11.04
AI 네비게이션  (0) 2024.10.27
Light (Unity)  (0) 2024.10.25
out ref 키워드  (0) 2024.10.25
시간 복잡도  (0) 2024.10.23