프로젝트를 테스트하는데 적 NPC의 인터렉션 트리거가 두번 이상 들어가게 되면 배틀용 NPC가 두번 생성되는 버그를 발견했다. 그 이유는 여러가지로 생각했을텐데 근본적인 원인을 찾아보면 OnTriggerEnter에 의해 생기는 버그 때문이다.
우선 문제의 영상부터 보자면
플레이어가 NPC 시선트리거를 두번 엔터를 하면 적 NPC가 두번 생성되었다.
이유는 스크립트에서 볼 수 있는데
//일반 적 필드의 스크립트 코드이다.
private void OnTriggerEnter2D(Collider2D collision)
{
//적의 감지범위에 들어온 오브젝트가 Player
if (collision.gameObject.CompareTag(Define.TAG_PLAYER))
{
if (!NPCDataManager.instance.npcDataDictionary[npcSO.id].isClear)
{
exclamationMarkSprite.gameObject.SetActive(true);
NPCInteraction();
}
}
}
public override void NPCInteraction()
{
exclamationMarkSprite.gameObject.SetActive(true); //느낌표를 띄운다.
//씬 데이터 매니저에 정보들 저장
SceneDataManager.instance.EnterBattleScene(npcSO.id);
}
이 코드에서 앞에 언급했듯이 OnTriggerEnter2D에서
플레이어가 트리거를 다가갈때마다(전환되기 전까지) 코드를 실행되어 영상에서 두번 다가가서 EnterBattleScene도 두번 호출이 되어 적 오브젝트가 2개나 생성되는 것이었다.
이걸 막는 방법은 간단한데, NPCInteraction안에서 해당 트리거 컴포넌트를 비활성시키는 것이다.
public class NPC : MonoBehaviour, INPCInteraction
{
public BoxCollider2D npcDetectCollider;
//생략
public virtual void NPCInteraction()
{
//NPC일 때, 상호작용하면 구현될 코드 작성
npcDetectCollider.enabled = false; //트리거를 한번더 나가지 않게
}
}
public class SwordEnemy_Field : NPC //다른 적도 마찬가지
{
//생략
private void OnTriggerEnter2D(Collider2D collision)
{
//적의 감지범위에 들어온 오브젝트가 Player
if (collision.gameObject.CompareTag(Define.TAG_PLAYER))
{
if (!NPCDataManager.instance.npcDataDictionary[npcSO.id].isClear)
{
exclamationMarkSprite.gameObject.SetActive(true);
NPCInteraction();
}
}
}
public override void NPCInteraction()
{
base.NPCInteraction();
exclamationMarkSprite.gameObject.SetActive(true); //느낌표를 띄운다.
//씬 데이터 매니저에 정보들 저장
SceneDataManager.instance.EnterBattleScene(npcSO.id);
}
}
적 필드 클래스가 NPC에 상속받았기 때문에 NPC클래스 안에 virtual로 되어있었던 NPCInteraction에서 비활성 시키고 적 필드 클래스 안에서 base로 상위 메서드를 호출하면 된다.
그러면 적이 두번 생성되지 않을 것이다.
'개발 TIL' 카테고리의 다른 글
7/19 부트캠프 개발 TIL (기술 모의 면접 2) (0) | 2024.08.03 |
---|---|
7/18 부트캠프 개발 TIL (기술 모의 면접 1) (0) | 2024.08.02 |
7/16 부트캠프 개발 TIL (맵 전환하기) (0) | 2024.08.01 |
7/15 부트캠프 개발 TIL (스킬 구현하기) (0) | 2024.07.22 |
7/12 부트캠프 개발 TIL (게임에서 필요한 요소) (0) | 2024.07.19 |