인프런 커뮤니티 질문&답변

박준영님의 프로필 이미지
박준영

작성한 질문수

[라이브 멘토링] 유니티 뱀파이어 서바이벌 장르 모작

Projectile 쏘기

Projectile이 _lifeTime뒤에 사라지지 않는데 어떻게 처리하면 좋을까요...?

작성

·

438

·

수정됨

0

게임을 실행했을 때, ProjectileController의 _lifeTime(10초) 뒤에 투사체가 없어지지 않아서 SkillController에서 Despawn 하는 부분에 breakpoint를 잡고 실행해봤습니다.

확인해보니 ObjectManager에서 type이 아래 사진처럼 SkillController로 잡히더라구요.tempsnip.png그래서 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

Rookiss님의 프로필 이미지
Rookiss
지식공유자

코루틴까지 갈 필요도 없이, Object.Destroy에 시간 넣는 버전이 있습니다.
그리고 매니저를 통해서 할 땐, 정말 아주 다양한 방법이 있는데요.
type을 사용하는 방법 말고도,
enum 으로 구분을 해줄 수 있는 타입을 최상위 클래스에다 넣어도 되고요.
수단과 방법을 가리지 않고(?) 다양하게 응용해보시기 바랍니다.

박준영님의 프로필 이미지
박준영

작성한 질문수

질문하기