【发布时间】:2018-04-06 01:53:34
【问题描述】:
我在 Youtube (https://www.youtube.com/watch?v=_nRzoTzeyxU) 上关注了关于如何为游戏创建对话系统的 Brackeys 教程。我目前正在尝试使该系统适应玩家可以走到 NPC 并按“提交”按钮访问他们的对话,而不是像视频显示的那样单击画布/UI 上的按钮。玩过《超级马里奥64》、《塞尔达传说:时之笛》等游戏的人,或者大多数带有文字对话的游戏的人,你可能会认出这一点。
我创建的 Interactable 脚本检测玩家是否在 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"); }
}
}
【问题讨论】:
-
我一发布就解决了这个问题。结果我只需要将 Interactable 脚本与对话触发脚本结合起来,并重新排列碰撞标签以击中标记为“玩家”的玩家,而不是使用单独的脚本来检测与 NPC 的碰撞。
-
您应该将此作为答案发布,以便其他人可以更轻松地看到它。