Erro em sistema de dialogo...
Página 1 de 1
Erro em sistema de dialogo...
Oi, gente.
Então meu problema, aqui é que para meu projeto eu preciso de um sistema de dialogo (como nos visual novel, RPG antigos, esses estilo que temos uma caixa de dialogo com o texto aparecendo). Depois de uma procura e tentativas (foram varias) eu achei um sistema perfeito para o projeto meu, já que toda parte de como ativo posso usar um outro script e deixar ele com todas as falas e conversas (resolve totalmente meu problema nesse detalhe). Passei a manhã inteira fazendo ele (outro detalhe é que o vídeo está em português, outro detalhe difícil de achar as coisas em português), bem agora que terminei ele e montei toda cena para testar ele (só para testar se estava certo, não tinha nem um problema) eis que me arruma um problema justamente na hora que acho esse script.
No caso o erro que a unity da é esse:
" NullReferenceException: Object reference not set to an object UIManager.ResetText() (at Assets/Scripts/Dialogue/UIManager.cs:41)
O problema é que esse erro é referente ao dato de criar uma nova string vazia para a caixa de dialogo quando quando mudar o persomangem que esta falando.
São esses os scritps que uso nesse sistema:
DialogueManager[]
Dialogue[]
using System.Collections;
DialogueContainer[]
Talker[]
UIManager[]
Quem quiser usar o script está todos eles que são usados para criar o sistema. Eu usei o sistema de dialogo desse video para fazer ele:
Obrigado por ler até, se alguém como resolve isso agradeço muito.
Então meu problema, aqui é que para meu projeto eu preciso de um sistema de dialogo (como nos visual novel, RPG antigos, esses estilo que temos uma caixa de dialogo com o texto aparecendo). Depois de uma procura e tentativas (foram varias) eu achei um sistema perfeito para o projeto meu, já que toda parte de como ativo posso usar um outro script e deixar ele com todas as falas e conversas (resolve totalmente meu problema nesse detalhe). Passei a manhã inteira fazendo ele (outro detalhe é que o vídeo está em português, outro detalhe difícil de achar as coisas em português), bem agora que terminei ele e montei toda cena para testar ele (só para testar se estava certo, não tinha nem um problema) eis que me arruma um problema justamente na hora que acho esse script.
No caso o erro que a unity da é esse:
" NullReferenceException: Object reference not set to an object UIManager.ResetText() (at Assets/Scripts/Dialogue/UIManager.cs:41)
O problema é que esse erro é referente ao dato de criar uma nova string vazia para a caixa de dialogo quando quando mudar o persomangem que esta falando.
São esses os scritps que uso nesse sistema:
DialogueManager[]
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class DialogueManager : MonoBehaviour
{
public static DialogueManager Instance;
public static event System.Action<Dialogue> NewTalker;
public static event System.Action ResetText;
public static event System.Action<string> ShowMessage;
public static event System.Action<bool> UIState;
private DialogueContainer currentDialogue;
private bool endCurrentTalk = true;
private bool buttonClicked = false;
InputAction acao;
void Awake()
{
Instance = this;
acao = new InputAction("Acao", binding: "<keyboard>/e");
acao.AddBinding("<Gamepad>/a");
acao.Enable();
}
public void StartConversation(DialogueContainer container)
{
currentDialogue = container;
StartCoroutine(StartDialogue());
UIState?.Invoke(true);
}
private IEnumerator StartDialogue()
{
for(int i = 0; i < currentDialogue._dialogues.Length; i++)
{
ResetText?.Invoke();
NewTalker?.Invoke(currentDialogue._dialogues[i]);
StartCoroutine(ShowDialogue(currentDialogue._dialogues[i].messages));
yield return new WaitUntil(() => endCurrentTalk);
}
UIState?.Invoke(false);
}
private IEnumerator ShowDialogue(string[] messages)
{
endCurrentTalk = false;
foreach(var message in messages)
{
ShowAllMessage(message);
yield return new WaitUntil(() => buttonClicked);
}
endCurrentTalk = true;
}
private void ShowAllMessage(string message)
{
ShowMessage?.Invoke(message);
buttonClicked = false;
}
public void ButtonWasClicked() =>
buttonClicked = true;
void Update()
{
if (Mathf.Approximately(acao.ReadValue<float>(), 1))
{
buttonClicked = true;
}
}
}
Dialogue[]
using System.Collections;
- Código:
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class Dialogue
{
public Talker _talker;
[UnityEngine.TextArea]
public string[] messages;
}
DialogueContainer[]
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DialogueContainer : MonoBehaviour
{
public Dialogue[] _dialogues;
}
Talker[]
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(menuName = "Create Talker", fileName = "New Talker")]
public class Talker : ScriptableObject
{
public Sprite _sprite;
}
UIManager[]
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class UIManager : MonoBehaviour
{
public GameObject UIContainer;
public Image _image;
public Text _talkerName;
public TMP_Text _dialogue;
void Awake()
{
DialogueManager.NewTalker += NewTalker;
DialogueManager.ShowMessage += ShowText;
DialogueManager.ResetText += ResetText;
DialogueManager.UIState += UIcontainerState;
}
void OnDestroy()
{
DialogueManager.NewTalker -= NewTalker;
DialogueManager.ShowMessage -= ShowText;
DialogueManager.ResetText -= ResetText;
DialogueManager.UIState -= UIcontainerState;
}
private void NewTalker(Dialogue talkerInformations)
{
_image.sprite = talkerInformations._talker._sprite;
_talkerName.text = talkerInformations._talker.name;
_image.GetComponent<Animator>().SetTrigger("animation");
}
private void ShowText(string message) =>
_dialogue.text = message;
private void ResetText() =>
_dialogue.text = string.Empty;
private void UIcontainerState(bool state) =>
UIContainer.SetActive(state);
}
Quem quiser usar o script está todos eles que são usados para criar o sistema. Eu usei o sistema de dialogo desse video para fazer ele:
Obrigado por ler até, se alguém como resolve isso agradeço muito.
NoctisDregon- Iniciante
- PONTOS : 1853
REPUTAÇÃO : 3
Respeito as regras :
Tópicos semelhantes
» Sistema de diálogo
» Sistema de Escolher Frases no Dialogo
» sistema de agachar e correr deu erro
» Sistema de Pulo está dando erro.
» sistema de dialogo mostra o html sendo escrito (Unity3D)
» Sistema de Escolher Frases no Dialogo
» sistema de agachar e correr deu erro
» Sistema de Pulo está dando erro.
» sistema de dialogo mostra o html sendo escrito (Unity3D)
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos