07
25

Play()

파티클 시스템을 재생한다.

파티클이 생성되고 재생되며, 시간에 따라 움직이고 사라지게 된다.

Pause()

파티클 시스템을 일시 정지한다.

파티클의 재생이 멈추며, 현재 시간에서 멈추었던 위치에서 재개될 때까지 대기한다.

파티클을 제거하지 않고 파티클 시스템을 일시 중지한다.
즉, 파티클은 화면에 계속 표시되며 새 파티클이 생성되지 않는 것이다.

Stop()

파티클 시스템을 정지한다.

파티클의 재생이 멈추고, 모든 활성화된 파티클이 제거된다.

즉, Stop 함수를 호출하면 파티클 시스템이 초기 상태로 재설정되고, 기존 파티클이 화면에서 제거된다.

Clear()

현재 파티클 시스템에서 모든 파티클을 제거한다.

파티클의 수명이 끝나거나, 재생이 완료된 파티클들을 제거한다.

하지만 추가적인 파티클 생성을 제어하지는 않는다.

Clear(true)

하위(자식) 파티클 시스템을 지우도록 지시한다.

예를 들어, 만약 게임 오브젝트 A에 파티클 시스템이 있고,
A의 하위 오브젝트인 B와 C에도 파티클 시스템이 있다면,
ParticleSystem.Clear(true)를 A에 대해 호출하면
A, B, C의 모든 파티클 시스템에 있는 파티클들이 즉시 사라진다.

Emit()

인자값으로 지정된 개수의 파티클을 생성하여 재생한다.

파티클의 생성 위치, 속도, 수명 등을 설정하여 커스터마이즈할 수 있다.
using UnityEngine;

public class ParticleEmitter : MonoBehaviour
{
    public ParticleSystem ps;
    public int numberOfParticles = 10;
    public float speed = 5f;
    public float lifespan = 2f;

    private ParticleSystem.EmitParams emitParams;

    private void Start()
    {
        emitParams = new ParticleSystem.EmitParams();
    }

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            EmitParticles();
        }
    }

    private void EmitParticles()
    {
        for (int i = 0; i < numberOfParticles; i++)
        {
            Vector3 randomPosition = transform.position + Random.insideUnitSphere * 0.5f; // Within 0.5 units from the emitter
            Vector3 randomDirection = Random.onUnitSphere; // Random direction
            float randomSpeed = Random.Range(speed - 1f, speed + 1f); // Random speed with slight variation
            float randomLifespan = Random.Range(lifespan - 0.5f, lifespan + 0.5f); // Random lifespan with slight variation

            emitParams.position = randomPosition;
            emitParams.velocity = randomDirection * randomSpeed;
            emitParams.startLifetime = randomLifespan;

            ps.Emit(emitParams, 1); // Emit a single particle with custom properties
        }
    }
}

IsAlive()

현재 파티클 시스템이 파티클을 재생 중인지 여부를 반환한다.

파티클 시스템이 재생 중인 동안 true를 반환하고, 정지되었거나 모든 파티클이 제거된 경우 false를 반환한다.

GetParticles()

현재 파티클 시스템에서 모든 파티클의 정보를 배열로 반환한다.

각 파티클의 위치, 속도, 수명, 크기 등의 정보를 가져올 수 있다.

SetParticles()

주어진 파티클 배열로 현재 파티클 시스템을 설정한다.

주어진 파티클 배열에 있는 파티클 정보를 시스템에 적용하여 재생될 수 있도록 설정한다.
using UnityEngine;

public class ParticleController : MonoBehaviour
{
    public ParticleSystem particles;

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.S))
        {
            ParticleSystem.Particle[] particleArray = new ParticleSystem.Particle[particles.particleCount];
            particles.GetParticles(particleArray);

            for (int i = 0; i < particleArray.Length; i++)
            {
                // 파티클들의 위치 조정
                particleArray[i].position += new Vector3(0, 1, 0);
            }

            particles.SetParticles(particleArray, particleArray.Length);
        }
    }
}

'유니티 개발 기술 > 그래픽 & 비주얼' 카테고리의 다른 글

material과 sharedMaterial  (0) 2023.07.30
ParticleSystem의 다양한 속성  (0) 2023.07.25
Light 클래스의 다양한 속성  (0) 2023.07.24
Direct Lighting  (0) 2023.07.24
Texture 클래스의 다양한 속성  (0) 2023.07.24
COMMENT