我在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"); }
}
}
答案 0 :(得分:0)
我发布后立即解决了这个问题。事实证明,我只需要将Interactable脚本与对话触发器脚本相结合,并重新安排碰撞标签以击中标记为“播放器”的播放器,而不是使用单独的脚本检测到与NPC发生冲突。