카테고리 없음

파티클시스템과 트레일렌더러2

rxo2 2025. 4. 11. 20:59
using System.Collections;
using DG.Tweening; // DOTween을 사용한 트윈 애니메이션을 위해 필요
using UnityEngine;

public class ExpDropEffect : MonoBehaviour
{
    // 이펙트를 복제하기 위한 프리팹 참조 (인스펙터에서 할당)
    [SerializeField] private ExpDropEffect expDropEffectPrefab;

    // 경험치 파티클 효과 (예: 반짝이는 효과)
    [SerializeField] private ParticleSystem expParticle;

    // 꼬리 이펙트를 위한 TrailRenderer 컴포넌트
    TrailRenderer trail;

    private void Start()
    {
        // 해당 오브젝트에서 TrailRenderer 컴포넌트를 가져옴
        trail = GetComponent<TrailRenderer>();
    }

    // 외부에서 호출 가능한 메서드, DieEffect와 동일하게 작동
    public void PlayEffect(float exp, Vector3 spawnPosition)
    {
        DieEffect(exp, spawnPosition);
    }

    // 경험치 이펙트 실행 함수
    public void DieEffect(float exp, Vector3 spawnPosition)
    {
        // 이펙트 오브젝트를 생성 위치로 이동
        transform.position = spawnPosition;

        // 파티클 이펙트가 설정되어 있다면 재생
        if (expParticle != null)
            expParticle.Play();

        // 화면 좌측 상단의 월드 좌표 계산 (카메라 기준)
        Vector3 screenTopLeft = Camera.main.ViewportToWorldPoint(new Vector3(0, 1, 10f));

        // 새로운 이펙트 인스턴스를 생성 (현재 위치에)
        ExpDropEffect newEffect = Instantiate(expDropEffectPrefab, spawnPosition, Quaternion.identity);

        // 이펙트를 부드럽게 화면 좌측 상단으로 이동
        transform.DOMove(screenTopLeft, 1f)
            .SetDelay(0.2f) // 이동 시작을 0.2초 지연
            .OnComplete(() => // 이동 완료 후 실행할 동작
            {
                // 경험치 지급 처리
                BattleManager.Instance.CurrentBattle.LevelUP(exp);

                // 디버그 로그 출력
                Debug.Log("경험치 지급 완료 및 파티클 종료");

                // 이펙트 오브젝트 제거
                Destroy(gameObject);
            });
    }
}

 

DOTween활용하여 이동.

  • .DOMove(...) : 지정 위치로 애니메이션 이동.
  • .SetDelay(...) : 0.2초 후에 이동 시작.
  • .OnComplete(...) : 이동 완료 후 콜백 실행.
    • TrailRenderer 종료
    • 객체 제거(Destroy)

using DG.Tweening; // DOTween을 사용한 트윈 애니메이션을 활용하여

파티클과 트레일을 기능을 좀더 다채롭게 사용할수 있다.