使用 Interactable 脚本从 NPC 调用对话脚本(Brackeys 系统)

Calling dialogue script from NPC using Interactable script (Brackeys' system)

我在 Youtube (https://www.youtube.com/watch?v=_nRzoTzeyxU) 上学习了有关如何为游戏创建对话系统的教程。由于我的游戏是 platformer/RPG,我目前正在尝试使这个系统适应玩家可以走到 NPC 并按下 "Submit" 按钮来访问他们的对话,而不是单击 NPC 上的按钮canvas/UI。

到目前为止,我已经创建了一个 Interactable 脚本,允许玩家检测他们是否在 NPC 配备的隐形球体碰撞器的范围内,该碰撞器正在运行。但是,如果我尝试访问 NPC 配备的 dialogueTrigger 脚本,我会收到 NullReferenceException 错误。我想要一些关于如何从 NPC 正确调用 dialogueTrigger 脚本并触发对话事件的帮助,因为我对代码很陌生,到目前为止我只有这个。任何帮助,将不胜感激。

编辑:

NullReferenceException: Object reference not set to an instance of an object Interactable.Update () (at Assets/Scripts/Interactable.cs:34)

对话触发器是:

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

public class DialogueTrigger : MonoBehaviour 

{
    public Dialogue dialogue;

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

可交互的是:

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

罪魁祸首是您的 Diag 推荐人。您是否正确地将 DialogueTrigger 预制件从层次结构 window 拖到 Interactable 上的 public 字段中?