public string[] Sentences;
public Transform chatTR;
public GameObject ChatBoxPrefab;
//public bool ChatCheck;
//void Update()
//{
// //if(ChatCheck == true)
// //{
// // TalkNpc();
// //}
//}
void TalkNpc()
{
GameObject gocopy = Instantiate(ChatBoxPrefab);
gocopy.GetComponent<ChatSystem>().OnDialogue(Sentences, chatTR);
}
private void OnTriggerEnter2D(Collider2D collision)
{
if(collision.gameObject.CompareTag("Player"))
{
TalkNpc();
}
}
현재 이런 코드를 짜서 적용을 시켰음
어떤 기능을 하냐면
플레이어가 이 사물의 트리거와 닿았을때 대화창을띄우는 기능인데
문제는 대화창이 2번 뜸
업데이트에서 실행되는것도 아닌데 대화창이 두번이나 뜨길레 왜이렇게 뜨는건가 한참을 고민해도 잘 모르겠어서 나름 해결법이라고 생각해서
bool b_check;
public string[] Sentences;
public Transform chatTR;
public GameObject ChatBoxPrefab;
//public bool ChatCheck;
//void Update()
//{
// //if(ChatCheck == true)
// //{
// // TalkNpc();
// //}
//}
void TalkNpc()
if(b_check == true)
{
{
GameObject gocopy = Instantiate(ChatBoxPrefab);
gocopy.GetComponent<ChatSystem>().OnDialogue(Sentences, chatTR);
}
}
private void OnTriggerEnter2D(Collider2D collision)
{
b_check = true;
if(collision.gameObject.CompareTag("Player"))
{
TalkNpc();
}
}
이렇게 하고 OnTriggerExit2d에서는 b_check = false;로도 했어
그런데 왠진 모르겠는데 해도 2번씩 뜨더라고..
혹시 한번만 뜨게 하는 방법 없을까
스크립트가 2개 있거나 플레이어의 콜라이더가 2개 있거나... 이외 여러 가지 요인이 있을 수도 있음 디버깅으로 조건문 안에 들어가는 함수나 오브젝트 하나씩 체크해보셈 - dc App
콜라이더랑 스크립트 둘 다 하나밖에 없는데 TriggerEnter을 다른 코드에서도 써봐도 2번씩 찍히더라고..enter과 stay가 동시에 처리되어서 그렇다는글도 본거같은데 이거 어떻게 해결 못하나 싶어..
B_check 가 false 일때만 실행 가능하게 하고 대화창 끝나면 true로 바꾸게 해봐