2017-04-11 1 views
0

개체와 충돌 할 때 나타나는 대화 대화를 화합 키로 만들려고합니다. 채팅 대화는 충돌이 종료 될 때까지 유지되어야합니다. 문제는 채팅 대화 상자가 충돌 할 때 키를 눌렀을 때 나타나지만 같은 초에 거짓으로 바뀌어 깜박 거린다는 것입니다. bool은 충돌하는 동안 true로 유지되는 대신 재설정됩니다.유니티 채팅 대화 시스템

 hitColliders = Physics.OverlapSphere(transform.position, 5f); 
    int i = 0; 
    while (i < hitColliders.Length) { 

     if (hitColliders [i].gameObject.tag == "gameobjectCollision") { 

      if (Input.GetKey (KeyCode.F)) { 
       Debug.Log ("pressed F"); 
       DialogueController.showConversation = true; 

      } 

      break; 
     } 

     else { 

      Debug.Log ("Conversation Off"); 
      DialogueController.showConversation = false; 
     } 

     i++; 
    } 

또한 스크립트가 제대로 연결되고 충돌하는 게임 개체로 메쉬 충돌자가 설정됩니다. 감사.

답변

0

당신은 정말로 충돌을 일으키지 않고 충돌을 생각해야합니다. 게임에서 대화 할 수있는 각 NPC마다 별도의 트리거 상자를 만듭니다. 그리고 플레이어 스크립트에서 OnTriggerEnter 및 OnTriggerExit를 사용하십시오. OnTriggerEnter를 클릭하면 버튼 클릭으로 대화를 시작할 수 있습니다. 그런 다음 OnTriggerExit을 사용하면 표지를 끌 수 있습니다.

public void Update() 
{ 
    if (inInteractRange && Input.GetKeyDown(KeyCode.E)) 
    { 
     DialogueSystemManager.Instance.StartDialogueForNpc(interactableNPCName); 
    } 
} 
private void OnTriggerEnter(Collider col) 
{ 
    inInteractRange = true; 
} 
private void OnTriggerExit(Collider col) 
{ 
    inInteractRange = false; 
    DialogueSystemManager.Instance.CloseDialogueWindow(); 
} 
+0

실제로 트리거를 시도했지만 충돌이 일종의 버그였습니다. 때로는 대화 상자가 열리지 않는 경우가 있습니다. 현재의 방법으로 업데이트는 매 프레임마다 충돌을 확인합니다. –

+0

그래, 시스템에서 실제로 비용이 많이 듭니다. 그러나 대화 시스템에 대한 충돌 기반 탐지를 수행하려는 경우 화합의 OnCollisionEnter 및 OnCollisionExit 이벤트에 실제로 연결해야합니다. 그리고 그 콜백 메쏘드의 불린 (Boolean)을 토글합니다. 하지만 트리거 시스템을 사용하는 통일 자산 저장소에는 대화 관리자 시스템이 있으며 누구도 트리거 시스템에 문제가 없습니다. 트리거를 사용하는 것이 좋은 이유는 게임에서 모니터링하는 대상이 많을 때 시스템 비용이 저렴하다는 것입니다. 사용하는 코드를 표시하도록 내 대답을 업데이트했습니다. –

+0

트리거 대신 충돌 이벤트를 사용하려면 OnCrrorEnter 및 OnTriggerExit를 OnCollisionEnter 및 OnCollisionExit으로 변경하십시오. –

0

다음

  1. 이 OnTriggerEnter에서 이벤트를 생성 할 수 있습니다.
  2. 해당 이벤트에 ChatDialogueHandler 스크립트 및 추가 리스너를 만듭니다.
  3. 일정이 잡히면 채팅 대화 상자를 사용하도록 설정하고 특정 시간이 지나면 채팅 대화 상자를 사용하지 않도록 설정합니다.