Unity聊天对话系统

时间:2017-04-11 12:15:10

标签: c# unity3d dialog

我正在尝试以统一方式进行聊天对话,当与对象发生碰撞并按下按键时,该对话应显示出来。聊天对话应保持到冲突退出。问题是聊天对话在碰撞时显示在按键上,但在同一秒内变为假,因此它会闪烁。在碰撞中,bool被重置而不是保持为真。

        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++;
  }

此外,正确附加脚本并且使用碰撞游戏对象设置网格对撞机。感谢。

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:0)

您可以执行以下操作

  1. 从OnTriggerEnter生成一个事件。
  2. 创建一个ChatDialogueHandler脚本并添加该事件的监听器。
  3. 在发生事件时启用聊天对话框,并在特定时间后禁用聊天对话框。
相关问题