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

时间:2018-04-04 22:03:51

标签: c# unity3d nullreferenceexception

我已经按照Youtube上的教程(https://www.youtube.com/watch?v=_nRzoTzeyxU)了解了如何为游戏创建对话系统。由于我的游戏是平台游戏/ RPG游戏,我目前正在尝试将此系统调整到玩家可以走到NPC的位置,然后按“提交”按钮访问他们的对话框,而不是单击画布/ UI上的按钮。

到目前为止,我已经创建了一个Interactable脚本,允许玩家检测它们是否在NPC配备的不可见球体对撞机的范围内,该NPC正在工作。如果我尝试访问NPC配备的dialogTrigger脚本,我会收到NullReferenceException错误。我想要一些帮助,如何从NPC正确调用dialogTrigger脚本并触发对话事件,因为我对代码很新,到目前为止我只有这个。任何帮助,将不胜感激。

编辑:

  

NullReferenceException:未将对象引用设置为对象的实例       Interactable.Update()(在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);
    }
}

Interactable是:

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

1 个答案:

答案 0 :(得分:1)

罪魁祸首将是你的df_1.mask(df_1.lt(0)).fillna({'A':9999,'B':0,'C':-9999}) Out[1440]: A B C 2017-01-01 00:01:00 9999.0 4.0 7.0 2017-01-01 00:02:00 2.0 0.0 8.0 2017-01-02 00:01:00 3.0 6.0 -9999.0 参考。您是否正确地将Diag预制件从“层次结构”窗口拖到DialogueTrigger上的公共字段中?