🎮파티클 시스템

⚙️파티클

파티클 시스템은 Paricles와 Emitter로 구성된다. Emitter는 게임 안에 배치하는 것이고 위치 정보를 담고 있다. 그리고 Emitter에서 분출 되는 행위를 Particles에게 부여한다.

파티클 시스템은 게임 오브젝트에 추가된 컴포넌트이다.

우선 Hierarchy 탭에서 오른쪽 마우스 클릭-Effects-Particle System을 눌러 Scene에 파티클을 추가해본다.

Particle

생성한 파티클 시스템을 선택해보면 파티클 시스템이 게임 오브젝트의 컴포넌트인 것을 확인할 수 있다.

ParticleSystem

생성한 파티클 시스템을 골인 지점의 자식 오브젝트로 설정한다. 골인 지점 자체에 컴포넌트로 파티클 시스템을 넣을 수도 있지만 파티클의 위치를 자유롭게 설정하기 위해 파티클 시스템을 자식 게임 오브젝트로 만드는 것이 유리하다.

파티클 시스템을 컨트롤하기 위해 모듈이라는 것을 사용한다. 파티클 시스템을 선택하여 Inspector 창을 보면 여러 개의 모듈이 있다는 것을 확인할 수 있다.

Modules

이 모듈들에서 파티클의 설정을 조절할 수 있다. Emitter에서 뿜어져 나오는 파티클 개수, 모양 등 다양하게 조절 가능하다. 하지만 파티클의 Transform에는 직접 접근할 수 없다. Emitter의 Transform에만 접근 가능하다.


⚙️파티클 이펙트 트리거

플레이어가 골인 지점을 통과할 때 파티클 이펙트가 재생되게 하려면 우선 파티클 시스템을 레퍼런스로 만들어야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class FinishLine : MonoBehaviour
{
    [SerializeField] float reloadTime = 0.5f;
    [SerializeField] ParticleSystem finishEffect;

    void OnTriggerEnter2D(Collider2D collision)
    {
        if(collision.tag == "Player")
        {
            Invoke("ReloadScene", reloadTime);
        }
    }

    void ReloadScene()
    {
        SceneManager.LoadScene(0);
    }
}

이제 Hierarchy 창에서 전에 만들었던 파티클 시스템을 드래그해서 스크립트 컴포넌트의 finishEffect 변수에 넣어준다.(finishEffect가 파티클 시스템을 참조)

ParticleScript

스크립트로 돌아가서 플레이어가 골인 지점과 충돌했을 때 이펙트를 재생시키면 된다.

1
2
3
4
5
6
7
8
    void OnTriggerEnter2D(Collider2D collision)
    {
        if(collision.tag == "Player")
        {
            finishEffect.Play();
            Invoke("ReloadScene", reloadTime);
        }
    }

이대로 프로젝트를 실행하고 테스트해보면 문제가 있다는 것을 확인할 수 있다. 게임을 실행하자마자 이펙트가 실행되는 문제가 있다.

문제 해결을 위해 파티클 시스템을 선택하고 Inspector 창을 보면 Play On Awake 옵션이 켜져 있는 것을 확인할 수 있다.

이 옵션이 켜져 있으면 플레이 버튼을 눌렀을 때, 파티클 시스템이 재생된다.

Play On Awake 옵션을 해제하고 파티클 시스템을 테스트 해보면 정상적으로 플레이어가 골인 지점을 통과할 때 이펙트가 재생되는 것을 확인할 수 있다.



Leave a comment