从Unity中的NPC调用脚本来触发对话

时间:2018-04-06 01:53:34

标签: c# unity3d

我在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"); }
  }
}

1 个答案:

答案 0 :(得分:0)

我发布后立即解决了这个问题。事实证明,我只需要将Interactable脚本与对话触发器脚本相结合,并重新安排碰撞标签以击中标记为“播放器”的播放器,而不是使用单独的脚本检测到与NPC发生冲突。