C# 在Unity中调用NPC脚本以触发对话
我在Youtube()上学习了Brackeys教程,学习如何为游戏创建对话系统。我目前正在尝试调整这个系统,让玩家可以走到NPC面前,按下“提交”按钮访问他们的对话,而不是像视频显示那样单击画布/用户界面上的按钮。对于那些玩过《超级马里奥64》、《塞尔达传奇:时间的陶笛》等游戏的人,或者大多数有文字对话的游戏的人,你可能会认识到这一点 我创建的可交互脚本检测玩家是否在NPC拥有的碰撞范围内,并允许玩家按下“提交”按钮,在范围内的NPC对话中调用该按钮。我只是不知道如何调用我命名为DialogueTrigger的脚本,该脚本保存NPC的对话。或者说,我正在努力完成的事情并没有以我正在尝试的方式完成。任何帮助都将不胜感激 可交互脚本:`C# 在Unity中调用NPC脚本以触发对话,c#,unity3d,C#,Unity3d,我在Youtube()上学习了Brackeys教程,学习如何为游戏创建对话系统。我目前正在尝试调整这个系统,让玩家可以走到NPC面前,按下“提交”按钮访问他们的对话,而不是像视频显示那样单击画布/用户界面上的按钮。对于那些玩过《超级马里奥64》、《塞尔达传奇:时间的陶笛》等游戏的人,或者大多数有文字对话的游戏的人,你可能会认识到这一点 我创建的可交互脚本检测玩家是否在NPC拥有的碰撞范围内,并允许玩家按下“提交”按钮,在范围内的NPC对话中调用该按钮。我只是不知道如何调用我命名为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;
}
}
}
`
现在我可以把一个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"); }
}
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类DialogueTrigger:MonoBehavior
{
公众对话;
公共对话()
{
FindObjectOfType().StartDialogue(对话);
Debug.Log(“dm called”);}else{Debug.Log(“dm为null”);}
}
}
我一发布就解决了这个问题。事实证明,我只需要将可交互脚本与对话触发器脚本相结合,并重新排列碰撞标记以命中标记为“玩家”的玩家,而不是使用单独的脚本检测到与NPC的碰撞。在我发布后立即解决了这一问题。事实证明,我只需要将可交互脚本与对话触发器脚本相结合,并重新排列碰撞标记以命中标记为“玩家”的玩家,而不是使用单独的脚本检测到NPC的碰撞。您应该将此作为答案发布,以便其他人更容易看到它。