프로그래밍/유니티

[유니티] 터치 이펙트 (Click Particle)

갓똥 2022. 7. 12. 22:19
728x90
반응형
[Header("[Click Particle]")]
public GameObject[] clickParticles;
private RectTransform[] _particleRects;
private Canvas _canvas;
private int _idx;

private void InitClickParticle()
{
    _particleRects = new RectTransform[clickParticles.Length];
    
    for (int i = 0; i < clickParticles.Length; i++)
    {
        _particleRects[i] = clickParticles[i].GetComponent<RectTransform>();
    }

    _canvas = GetComponent<Canvas>();
    _idx = 0;
}

private void OnUpdateClickParticle()
{
    if (Input.GetMouseButtonDown(0))
    {
        _particleRects[_idx].gameObject.SetActive(false);

        Vector2 startPos = Input.mousePosition / _canvas.scaleFactor;
        _particleRects[_idx].anchoredPosition = startPos;
            
        _particleRects[_idx].gameObject.SetActive(true);
            
        _idx++;
    }

    if (_idx >= clickParticles.Length)
        _idx = 0;
}

처음엔 한개로 시작해서 ParticlePool을 만들어 동적으로 생성하고 관리하려했는데

이펙트 재생시간 자체가 짧고 중간에 사라져도 티도 안나서 그냥 5개정도로 고정해서 사용했다.

 

이펙트는 particle system을 통해 재생이 끝나면 오브젝트를 끄고

idx도 돌려쓰는게 아니라 0번부터 재생중이지 않은 particle이 있으면 그걸 재생시키고 하는 방식이였는데  수정했다.

728x90
반응형