C# 在Unity中调用NPC脚本以触发对话

C# 在Unity中调用NPC脚本以触发对话,c#,unity3d,C#,Unity3d,我在Youtube()上学习了Brackeys教程,学习如何为游戏创建对话系统。我目前正在尝试调整这个系统,让玩家可以走到NPC面前,按下“提交”按钮访问他们的对话,而不是像视频显示那样单击画布/用户界面上的按钮。对于那些玩过《超级马里奥64》、《塞尔达传奇:时间的陶笛》等游戏的人,或者大多数有文字对话的游戏的人,你可能会认识到这一点 我创建的可交互脚本检测玩家是否在NPC拥有的碰撞范围内,并允许玩家按下“提交”按钮,在范围内的NPC对话中调用该按钮。我只是不知道如何调用我命名为Dialogue

我在Youtube()上学习了Brackeys教程,学习如何为游戏创建对话系统。我目前正在尝试调整这个系统,让玩家可以走到NPC面前,按下“提交”按钮访问他们的对话,而不是像视频显示那样单击画布/用户界面上的按钮。对于那些玩过《超级马里奥64》、《塞尔达传奇:时间的陶笛》等游戏的人,或者大多数有文字对话的游戏的人,你可能会认识到这一点

我创建的可交互脚本检测玩家是否在NPC拥有的碰撞范围内,并允许玩家按下“提交”按钮,在范围内的NPC对话中调用该按钮。我只是不知道如何调用我命名为DialogueTrigger的脚本,该脚本保存NPC的对话。或者说,我正在努力完成的事情并没有以我正在尝试的方式完成。任何帮助都将不胜感激

可交互脚本:`

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Interactable : MonoBehaviour {

private GameObject triggeringNpc;
private bool triggering;
public DialogueTrigger Diag;


void Start()
{

}   


void Update() 

{



    if(triggering)
        {
        Debug.Log("Within Range");



            if (Input.GetButtonDown("Submit"))

                {
                    Debug.Log("Pressed the Interact Button");
                    Diag.TriggerDialogue();


                }
        }
}
void OnTriggerEnter(Collider other)
{
    if(other.tag == "NPC")
    {
        triggering = true;
        triggeringNpc = other.gameObject;
    }

}

void OnTriggerExit(Collider other)
{
    if(other.tag == "NPC")
    {
        triggering = false;
        triggeringNpc = null;
    }
  }
}
`

现在我可以把一个NPC的脚本放在脚本中,它可以工作,但我更愿意它称为NPC拥有的任何对话触发脚本。我肯定这里有我遗漏的东西

这是对话触发器

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DialogueTrigger : MonoBehaviour 

{



public Dialogue dialogue;

public void TriggerDialogue ()
{
    FindObjectOfType<DialogueManager>().StartDialogue(dialogue);

    Debug.Log("dm called"); } else { Debug.Log("dm is null"); }
  }
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类DialogueTrigger:MonoBehavior
{
公众对话;
公共对话()
{
FindObjectOfType().StartDialogue(对话);
Debug.Log(“dm called”);}else{Debug.Log(“dm为null”);}
}
}

我一发布就解决了这个问题。事实证明,我只需要将可交互脚本与对话触发器脚本相结合,并重新排列碰撞标记以命中标记为“玩家”的玩家,而不是使用单独的脚本检测到与NPC的碰撞。

在我发布后立即解决了这一问题。事实证明,我只需要将可交互脚本与对话触发器脚本相结合,并重新排列碰撞标记以命中标记为“玩家”的玩家,而不是使用单独的脚本检测到NPC的碰撞。您应该将此作为答案发布,以便其他人更容易看到它。