시각적 효과(애니메이션을 통한 처리)와 기능적 측면(스크립트를 통한 처리)을 분리
프로젝트 어디에서든 Skill Manager에 쉽게 접근할 수 있도록 Singleton으로 만든다
public class SkillManager : MonoBehaviour
{
public static SkillManager instance;
public Dash_Skill dash { get; private set; }
public Clone_Skill clone { get; private set; }
private void Awake()
{
if (instance != null)
Destroy(gameObject);
else
instance = this;
}
private void Start()
{
dash = GetComponent<Dash_Skill>();
clone = GetComponent<Clone_Skill>();
}
}
public class Skill : MonoBehaviour
{
[SerializeField] protected float cooldown;
protected float cooldownTimer;
//cooldownTimer를 업데이트
protected virtual void Update()
{
cooldownTimer -= Time.deltaTime;
}
//스킬 사용 여부 확인
public virtual bool CanUseSkill()
{
if(cooldownTimer < 0)
{
UseSkill();
cooldownTimer = cooldown;
return true;
}
return false;
}
//스킬 사용 동작 정의
public virtual void UseSkill()
{
//하위 클래스에서 필요한 스킬 동작을 구체적으로 정의
}
}