Я следил за учебником Brackeys на Youtube (https://thewikihow.com/video__nRzoTzeyxU) о том, как создать систему диалога для игры. В настоящее время я пытаюсь адаптировать эту систему к тому, чтобы игрок мог подойти к NPC и нажать кнопку «Отправить», чтобы получить доступ к его диалогу, вместо того, чтобы нажимать кнопку на холсте / пользовательском интерфейсе, как показано на видео. Те, кто играл в такие игры, как Super Mario64, The Legend of Zelda: Ocarina of time или большинство игр с текстовыми диалогами, могут это узнать.
Сценарий взаимодействия, который я создал, определяет, находится ли игрок в сфере столкновения или нет, которая есть у NPC, и позволяет игроку нажимать кнопку «Submit» на том, что должно вызывать диалог для 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. Я уверен, что мне здесь чего-то не хватает.
Это для Dialogue Trigger
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"); }
}
}
вы должны опубликовать это как ответ, чтобы другим было легче его увидеть.





Решил это, как только опубликовал. Оказывается, мне просто нужно было объединить интерактивный сценарий со сценарием диалоговых триггеров и переставить теги столкновения, чтобы поразить игрока с тегом «Player», вместо того, чтобы иметь отдельный сценарий, который обнаруживал столкновение с NPC.
Решил это, как только опубликовал. Оказывается, мне просто нужно было объединить интерактивный сценарий со сценарием диалоговых триггеров и переставить теги столкновения, чтобы поразить игрока с тегом «Player», вместо того, чтобы иметь отдельный сценарий, который обнаруживал столкновение с NPC.