Files
WhaleAdventure_VR/Assets/02_Scripts/Rhythm/RhythmProjectile.cs

38 lines
1.5 KiB
C#

using Hovl;
using UnityEngine;
// Hovl의 HS_ProjectileMover(에셋)를 "수정하지 않고" 히트 이펙트를 코드로 터뜨리기 위한 서브클래스.
// 핵심: protected 멤버(hit/hitPS/projectilePS/collided)는 '파생 클래스'에서는 접근 가능하다.
// 그래서 에셋 원본은 그대로 두고, 충돌(Collision) 없이 판정 성공 시 Detonate()로 이펙트만 재생한다.
public class RhythmProjectile : HS_ProjectileMover
{
// 판정 성공 시 호출. 노트가 곧 Destroy되어도 이펙트가 보이도록 노트에서 분리 후 재생.
public void Detonate()
{
if (collided) return;
collided = true;
// 날아가는 동안의 트레일 파티클은 정지
if (projectilePS != null)
projectilePS.Stop(true, ParticleSystemStopBehavior.StopEmittingAndClear);
// 히트 이펙트 컨테이너(없으면 파티클 본체)를 노트에서 떼어내 현재 위치에서 재생
GameObject fx = hit != null ? hit : (hitPS != null ? hitPS.gameObject : null);
if (fx == null) return;
fx.transform.SetParent(null, true);
fx.transform.position = transform.position;
fx.SetActive(true);
if (hitPS != null)
{
hitPS.Clear(true);
hitPS.Play(true);
}
// 재생이 끝나면 분리한 이펙트도 정리
float life = hitPS != null ? hitPS.main.duration + hitPS.main.startLifetime.constantMax : 2f;
Destroy(fx, life);
}
}