使用 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 字段中?
我在 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 字段中?