Dreaming developer

예비 개발자를 꿈꾸는 서연이의 기록일지

Together, Tomorrow

Unity(C#)

[Unity 기초] 파티클 시스템 (Particle System)

연잎(lotus leaf) 2021. 7. 19. 20:00
728x90

본 게시물은 유튜브 '케이디' 님 강좌를 바탕으로 쓰여졌습니다.

 

 

 

 

*Particle System 추가하는법

Hierarchy->Effect->Particle Sytem 클릭

 

 

 

 

 

추가해주면 뭔가 여러개의 빛들이 뿜어져 나옴.

 

 

Pause ,Restart,Stop으로 입자의 움직임을 제어할수있다.

 

Particle System의 Inspector창

 

 

우선 Transform 의 Position,Rocation,Scale로 각각 파티클의 위치,회전각,크기를 바꿀수 있다.

 

<Particle System>

 

Duration: 지속시간. 

 

Looping :반복여부.

 

Prewarm: 예열기간. 처음부터 입자가 모두 방출된채로 시작할건지/ 서서히 방출하기 시작할건지 

 

Start Delay: 시스템이 활성화된 후 방출을 시작하기까지 기다리는 지연 시간

 

Start Lifetime :생명주기. 입자가 생성되고 언제 사라지는지

 

Start speed :입자 방출 속도

 

 

-Constant :상수 (고정값)

-Curve :  곡선

-Random Between Two Constants: 두 상수사이에서 랜덤하게 선택.

-Random Between Two Curves  : 두 곡선사이에서 랜덤하게 선택.

 

3D Start Size: 3D 시작 크기

 

Start Size: 시작 크기

.

 

Start Rotation : 시작각도

 

Start Color : 시작 색깔

 

Gravity Modifier: 중력. 0으로 하면 중력 효과가 해제

 

Simulation Space:  파티클을 부모 오브젝트를 따라 이동하게 할지, 커스텀 오브젝트를 따라 이동하게 할지, 게임 월드에서 독립적으로 이동하게 할지 결정

더보기

 

예를 들어 구름, 호스, 화염 방사기와 같은 시스템에서는 파티클이 부모 게임 오브젝트와 따로 움직이도록 해야함.

오브젝트가 주변을 움직이면서 파티클을 생성하더라도 생성된 파티클은 월드 공간에 잔류하는 흔적을 남기기 때문.

반면에 두 개의 전극 사이에서 생기는 불꽃을 만드는 데 사용되는 파티클이라면 부모 오브젝트와 함께 이동해야함.Custom으로 설정하면 파티클이 더 이상 자체 트랜스폼 컴포넌트에 비례하여 움직이지 않으며, 지정된 트랜스폼 컴포넌트의 움직임에 비례하여 움직임.

 

Simulation Speed :시뮬레이션 속도

 

Delta Time: 일시정지했을때 계속 재생시킬것인지 여부

 

Scaling Mode: 트랜스폼에서 스케일을 사용하는 방법을 설정

 

Hierarchy/Local/Shape

Local을 선택하면 파티클 시스템 트랜스폼 스케일만 적용되고 부모는 무시

Shape을 선택하면 파티클의 시작 포지션에 스케일이 적용되지만 크기에는 영향X.

 

Play on Awake: 씬 시작할때 재생시킬것인지 여부

 

Emitter Velocity: 방출속도

 

Max Particles:동시에 활성화되있는 최대 입자수

 

Auto Random Seed:활성화하면 파티클 시스템을 재생할 때마다 시스템이 조금씩 다르게 표시됨. 비활성화하면 시스템을 재생할 때마다 파티클 시스템이 똑같이 보임.

 

Stop Action: 시스템에 속한 모든 파티클이 완료되어 시스템이 중지되었을 때 특정 동작을 수행하도록 설정

Particle system을 정지시켰을때 게임 오브젝트의 상태 결정 

 

None

Destroy(파괴)

Disable(비활성화)

Callback(OnParticleSystemStopped 콜백을 게임 오브젝트에 연결된 스크립트로 전송)

 

*Particle System의 정지 기준?

더보기

 

시스템의 파티클이 모두 소멸되고 파티클의 수명이 지속 시간을 초과하면 시스템이 중지된 것으로 간주

루프를 반복하는 시스템에서는 스크립트를 통해 중지되었을 때 중지된 것으로 간주

 

 

Culling Mode :파티클이 화면을 벗어나면 파티클 시스템 시뮬레이션을 일시정지할지 여부

 

Ring buffer Mode :파티클이 Max Particles 수에 도달할 때까지 파티클을 계속 활성화. Max Particles 수에 도달하면 수명이 경과한 파티클을 제거하는 대신 가장 오래된 파티클을 재활용하여 새 파티클을 생성함.

 

 

Disabled 시스템이 수명이 경과한 파티클을 제거하도록 Ring Buffer Mode 를 비활성화합니다.
    Pause Until Replaced 수명을 다한 오래된 파티클을 일시정지했다가 Max Particle 한계에 도달하면 시스템에서 재활용하여 새 파티클로 다시 표시되게 합니다.
    Loop Until Replaced 수명을 다한 파티클이 특정한 수명 비율 지점으로 다시 돌아가며, Max Particle 한계에 도달하면 시스템에서 재활용하여 새 파티클로 다시 표시되게 합니다.

 

<여러가지 모듈>

 

 

Emission : 파티클 시스템의 방출 속도와 타이밍 관련.

 

 

Rate over Time 시간 단위당 방출되는 파티클의 수
Rate over Distance 이동한 거리 단위당 방출되는 파티클의 수
Bursts 버스트는 파티클을 생성하는 이벤트입니다. 이 설정을 통해 지정된 시점에 파티클을 방출할 수 o
    Time 파티클 시스템이 시작된 이후로 버스트를 방출할 시점을 초 단위로 설정
    Count 방출되는 파티클 수를 설정
    Cycles 버스트를 반복할 횟수를 설정
    Interval 버스트가 반복되는 시간 사이의 간격(초)을 설정
    Probability 각 버스트 이벤트가 파티클을 생성할 가능성을 제어 값이 클수록 시스템이 더 많은 파티클을 생성하며, 값을 ’1’로 설정하면 시스템이 100% 파티클을 생성.

+를 눌러 요소를 하나 추가해줘보았다.

 

그럼 이렇게 특정 시간 간격마다 30개의 입자가 한꺼번에 방출된다! 

 

 

Shape :파티클 시스템이 방출될 수 있는 체적 또는 표면과 시작 속도의 방향을 정의

 

 


Shape :방출 볼륨의 모양

 

Angle: 방출 볼륨의 각도

 

Radius :입자들이 뿜어져 나오는 원의 범위

 

더보기
빨간색 원의 반지름 =Radius

 

Postion/Rotation /Scale: 방출볼륨의 위치,회전각,규모(크기)

 

 

 

Velocity over Lifetime: 파티클의 수명 주기에 걸친 속도 조절

 

 

Linear :X축, Y축, Z축에 있는 파티클의 직선 속도

Orbital: X축, Y축, Z축 주위에 있는 파티클의 궤도 속도

Offset: 궤도를 따라 파티클을 회전시키기 위한 궤도의 중앙 포지션

 

 

수치를 잘 조정하면 이렇게 축을 중심으로 빙글빙글 회전하는 Particle System을 만들수도 있다! 

 

 

Limit Velocity over Lifetime: 파티클의 속도가 전체 수명 동안 어떻게 감소되는지 제어

 

Drag :저항값. 시간이 지날수록 점점 speed를 낮춤.

 

 

Force over Lifetime : 파티클의 움직임은 이 모듈에서 설정된 힘(예: 바람이나 인력)에 의해 가속화

 

speed!=force 는 다른 개념

 

Color over Lifetime : 시간에따른 색깔변화

맨 왼쪽이 start color, 맨 오른쪽이 사라지기 직전의 color

 

위와 같은 setting을 적용시켜주고 나면,

 

 

입자의 처음 시작컬러는 하늘색이었다가 점점 그라데이션되면서 빨간색으로 변함.

 

 

Size over Lifetime : 시간에 따른 크기변화 ->그래프로 표현 가능.

 

 

 

 Noise : Particle의 노이즈효과( 움직임 방해)

 

적용시켜주면

입자가 부들부들 떨린다. 지지직거림.

 

 

 

Collision :입자의 충돌여부

 

이때 Type 을 World로 선택하면 collider를 지닌 모든 객체와 충돌한다. 

->자원소비가 심해서 권장하지 x

나는 plane과 충돌하도록 설정해주었다.

 

 

그럼 이렇게 particle과 plane이 충돌하여 입자가 통통 튀긴다.

 

 

 

Triggers : 충돌했을 경우 특정 이벤트 실행

 

 

 

 

 

+ 를 눌러서 collider를 추가시킬수있다.

 

Inside : 콜리더에 닿는순간.

 

Outside :콜리더에 닿지 않는순간

 

Enter : 들어올때

 

Exit :들어왔다 빠져나갈때 

 

kill(없음) /ignore(무시)/callback 

 

 

 

+onTriggerExit와 같은 함수를 이용해 특정 장치가 실행되도록 할수도있다.

 

 

Sub Emitters : 입자들의 입자 

 

 

EX) 폭탄이 땅에 착지하고 터질때 . 미사일의 잔해가 다른 곳으로 날라가서 또 폭발을 일으킬때

 

 

Texture Sheet Animation :입자를 sprite로 바꿀수 있도록함.

 

 

 

Mode -> sprite -> 원하는 사진삽입 가능

 

 

 

check 표시 sprite로 바꾸어 보았다.

 

 

Light : 파티클에 실시간 광원을 추가

Ratio : 광원이 붙어있을 확률. 1=100%

 

Maximum Light : 최대 Light수

 

 

 

 

Trail : 입자가 지나간 흔적을 표시

 

 

 

Ratio :흔적을 표시할 확률

Minimum Vertex Distance :잔상에 새로운 버텍스가 추가되기까지 파티클이 이동해야 하는 거리를 정의.최적화같은것.

0에 가까울수록 과부하 , 1에 가까울수록 나아짐.

 

Texture Mode : 여러가지효과 tile/segment/stretch 등등

 

 

Color over Lifetime :잔상이 추가된 파티클의 수명에 따라 전체 잔상의 색상을 제어

Width over Trail : 잔상의 너비를 길이에 따라 제어

Color over Trail : 잔상의 컬러를 길이에 따라 제어

 

처음에 무작정 적용시키면 자주색으로 그래픽이 깨져서 보이는데 그건 render module 의 Trail Material 을 설정해주지 않아서 그렇다. 

none 으로 되어있던걸 바꾸어주면 그래픽 깨짐현상 해결.

 

 

 

 

Trail을 활용하면 이렇게 뭔가 영혼? 같은 느낌도 표현이 가능하다! 

 

 

 

그외

 

Color by speed/Size by speed/Rotation by speed :속도값에 따라 색깔,속도,회전을 조정할수 있음.

 

 

그리고 대망의 마지막 모듈

 


Renderer 

 

 

 

 

 

Render Mode :렌더링된 이미지가 그래픽 이미지나 메시에서 생성되는 방식

 

 Stretched Billboard:파티클은 항상 카메라를 향하지만, 다양한 스케일이 적용

 

  Horizontal Billboard:파티클 평면과 XZ “바닥” 평면이 평행해짐 

-> = 위에서 아래로 내려다봐야 보임

 

Vertical Billboard : 파티클이 월드 Y축에 똑바로 서 있지만 카메라를 향함.

-> xy 평면을바라보아야 보임.

 

 

Render Alignment :파티클 빌보드가 어느 방향을 향하고 있는지 선택

 

 View 파티클은 카메라 평면을 향합니다.
    World 파티클은 월드 축과 정렬됩니다.
    Local 파티클은 해당 게임 오브젝트의 Transform 컴포넌트에 따라 정렬됩니다.
    Facing 파티클은 카메라 게임 오브젝트의 정면을 향합니다.

 

 

 

 

Masking:

가려지게하는거

 

Cast Shadow:활성화하면 파티클 시스템은 섀도우 캐스팅 광원이 빛날 때 섀도우를 만듬.Receice Shadows : 다른것에 의해 그림자 영향을 받을것인가Sorting Layer/Order in Layer :우선순위 결정Light Probes : 프로브 기반 조명 보간 모드Reflection Probes :이 옵션이 활성화되어 있고 반사 프로브가 씬에 존재할 경우 이 게임 오브젝트에 대한 반사 텍스처가 선택되고 빌트인 셰이더 uniform 변수로 설정

Pivot : 회전하는 파티클의 중심 피벗 포인트를 수정

 

 

 

 

< Particle System Script 활용>

 

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{

    ParticleSystem ps;

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        ps.Play();// 재생시작
        ps.Emit(100);//즉각적으로 100개의 파티클 방출 , burst같은것.
        ps.Stop(); //정지
        ps.Pause(); //일시정지
        ps.transform.localScale = new Vector3(2, 2, 2); //파티클 시스템 크기 변경
    }
}