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을 사용한 트윈 애니메이션을 활용하여
파티클과 트레일을 기능을 좀더 다채롭게 사용할수 있다.