【问题标题】:Unity chat dialog systemunity 聊天对话系统
【发布时间】:2023-03-03 07:13:20
【问题描述】:

我正在尝试统一进行聊天对话,当与对象碰撞并按下一个键时应该会显示该对话。聊天对话应该一直保持到碰撞退出。问题是聊天对话在碰撞时出现在按键上,但在同一秒内变为假,所以它会闪烁。 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++;
  }

此外,脚本已正确附加,并且网格碰撞器已设置为碰撞游戏对象。谢谢。

【问题讨论】:

    标签: c# unity3d dialog


    【解决方案1】:

    你可以这样做

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

    【讨论】:

      【解决方案2】:

      您应该真正考虑通过触发器而不是碰撞来执行此操作。因此,为您可以在游戏中与之交谈的每个 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();
      }
      

      【讨论】:

      • 我实际上尝试过使用触发器,但碰撞有点错误,有时对话框打开有时什么也没有发生。使用当前方法,更新每帧检查冲突
      • 是的,这在系统上变得非常昂贵。但是,如果您要为对话系统进行基于碰撞的检测,您应该真正插入统一的 OnCollisionEnter 和 OnCollisionExit 事件。只需在该回调方法中切换一个布尔值。但是我在统一资产商店中有一个使用触发器的对话管理器系统,并且没有人对触发器系统有任何问题。我建议使用触发器的唯一原因是,当您的游戏正在监控大量对象时,它们在系统上的成本要低得多。我已更新我的答案以显示我使用的代码
      • 如果您想使用碰撞事件而不是触发器,请将 OnTriggerEnter 和 OnTriggerExit 更改为 OnCollisionEnter 和 OnCollisionExit。
      猜你喜欢
      • 2018-01-14
      • 2020-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-29
      • 2013-03-28
      • 1970-01-01
      相关资源
      最近更新 更多