작성
·
438
·
수정됨
0
게임을 실행했을 때, ProjectileController의 _lifeTime(10초) 뒤에 투사체가 없어지지 않아서 SkillController에서 Despawn 하는 부분에 breakpoint를 잡고 실행해봤습니다.
확인해보니 ObjectManager에서 type
이 아래 사진처럼 SkillController로 잡히더라구요.그래서 else if (typeof(T).IsSubclassOf(typeof(SkillController))) { ... }
조건문에 들어가지 않고 Despawn 함수가 끝나는거 같은데 어떻게 수정하면 좋을까요...?
처음엔 SkillController에서 CoDestroy함수를 아래와 같이 바꿔볼까 했는데
IEnumerator CoDestroy(float delaySeconds)
{
yield return new WaitForSeconds(delaySeconds);
if (this.IsValid())
{
Managers.Object.Despawn(this as ProjectileController);
}
}
나중에 n초 뒤에 사라지는 장판형 스킬을 관리하는 다른 Controller를 만들어야 한다고 한다면 위와 같은 코드처럼 강제로 캐스팅 하면 안될거같고,
ObjectManager의 Despawn 함수에
else if (type == typeof(ProjectileController))
{
Projectiles.Remove(obj as ProjectileController);
Managers.Resource.Destroy(obj.gameObject);
}
위와 같은 코드를 추가한다고 해도 어짜피 type == SkillController
라서 저 조건에도 맞지 않더라구요ㅠㅠ 어떻게 고칠지 감이 안잡혀서 질문 드립니다!
답변 1
0
코루틴까지 갈 필요도 없이, Object.Destroy에 시간 넣는 버전이 있습니다.
그리고 매니저를 통해서 할 땐, 정말 아주 다양한 방법이 있는데요.
type을 사용하는 방법 말고도,
enum 으로 구분을 해줄 수 있는 타입을 최상위 클래스에다 넣어도 되고요.
수단과 방법을 가리지 않고(?) 다양하게 응용해보시기 바랍니다.