Caixa de dialogo aparece e desaparece muito rápido ;-
2 participantes
Página 1 de 1
Caixa de dialogo aparece e desaparece muito rápido ;-
Fiz 5 Scripts de um tutorial de um cara ensinando como fazer um sistema de diálogo com respostas na Unity. Porém eu alterei um pouco e em algumas partes do vídeo eu fiquei perdido. Quando eu clico a tecla "E" para abrir a caixa de diálogo, ela aperece e desaparece. Sendo que isto só era para acontecer quando eu precionasse a tecla outra vez. Eu to aqui o dia todo tentando descobrir o que está errado mas eu n consigo ;-;
Esses scripts são auxiliares pra vc escrever as falas e as respostas
Esse controla o painel do dialogo com o botão de respostas e o texto
esse vai no boneco pro jogador interagir com ele apertando "E" e aparecer o dialogo
Esse aqui vou assumir pra vcs que eu ainda to tentando entender, mas pelo nome que o cara deu no vídeo e onde ele botou, é pra fazer alguma coisa no botão
O que mais me buga é pq todos os scripts são conectados de alguma forma, ou seja E MAIS DIFICIL AINDA PRA MIM SABER ONDE EU ERREI ;-
Me ajudem por favor, estou fazendo esse jogo como projeto de um trabalho que tem que ser entregue no final do ano. Eu sou novato nesse área de programação, e estou aflito de que eu consiga terminar esse jogo até lá. ;--;
Esses scripts são auxiliares pra vc escrever as falas e as respostas
- Código:
[size=14]using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu]
public class FalaNPC : ScriptableObject
{
public string Fala;
public Respostas[] respostas;
}
[/size]
- Código:
[size=14]using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class Respostas
{
public string Resposta;
public FalaNPC ProximaFala;
}
[/size]
Esse controla o painel do dialogo com o botão de respostas e o texto
- Código:
[size=14]using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Painel : MonoBehaviour
{
public GameObject painel;
public Text falaNPC;
public GameObject Resposta;
private bool FalaAtiva = false;
FalaNPC falas;
void Update()
{
if(Input.GetKeyDown(KeyCode.Space) && FalaAtiva)
{
if(falas.respostas.Length > 0)
MostrarRespostas();
}
else
{
FalaAtiva = false;
painel.SetActive(false);
}
}
public void MostrarRespostas()
{
falaNPC.gameObject.SetActive(false);
FalaAtiva = false;
for (int i = 0; i < falas.respostas.Length; i++)
{
GameObject tempResposta = Instantiate(Resposta, painel.transform) as GameObject;
tempResposta.GetComponent<Text>().text = falas.respostas[i].Resposta;
tempResposta.GetComponent<BotaoControle>().Setup(falas.respostas[i]);
}
}
public void ProximaFala(FalaNPC fala)
{
falas = fala;
FalaAtiva = true;
painel.SetActive(true);
falaNPC.gameObject.SetActive(true);
falaNPC.text = falas.Fala;
LimparResposta();
}
public void LimparResposta()
{
BotaoControle[] Botoes = FindObjectsOfType<BotaoControle>();
foreach (BotaoControle Butao in Botoes)
{
Destroy(Butao.gameObject);
}
}
}
[/size]
esse vai no boneco pro jogador interagir com ele apertando "E" e aparecer o dialogo
- Código:
[size=14]using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Diálogo : MonoBehaviour
{
public FalaNPC[] falas;
private bool DialogoConcluido = false;
private bool PodeDialogar = false;
public int d;
private GameObject player;
Painel painel;
void Start()
{
player = GameObject.FindWithTag ("Player");
painel = FindObjectOfType<Painel>();
}
void Update()
{
if (Vector3.Distance (transform.position, player.transform.position) < d)
{
PodeDialogar = true;
}
else
{
PodeDialogar = false;
}
if(PodeDialogar == true && Input.GetKeyDown("e"))
{
if (!DialogoConcluido)
{
painel.ProximaFala(falas[0]);
DialogoConcluido = true;
}
else
{
painel.ProximaFala(falas[1]);
}
}
}
}
[/size]
Esse aqui vou assumir pra vcs que eu ainda to tentando entender, mas pelo nome que o cara deu no vídeo e onde ele botou, é pra fazer alguma coisa no botão
- Código:
[size=14]using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BotaoControle : MonoBehaviour
{
Respostas Data;
public void ProximaFala()
{
FindObjectOfType<Painel>().ProximaFala(Data.ProximaFala);
}
public void Setup(Respostas Resposta)
{
Data = Resposta;
}
}
[/size]
O que mais me buga é pq todos os scripts são conectados de alguma forma, ou seja E MAIS DIFICIL AINDA PRA MIM SABER ONDE EU ERREI ;-
Me ajudem por favor, estou fazendo esse jogo como projeto de um trabalho que tem que ser entregue no final do ano. Eu sou novato nesse área de programação, e estou aflito de que eu consiga terminar esse jogo até lá. ;--;
ChrisDOS- Iniciante
- PONTOS : 1893
REPUTAÇÃO : 0
Respeito as regras :
Re: Caixa de dialogo aparece e desaparece muito rápido ;-
Caramba, cinco Scripts só pra criar um sistema de diálogo? Tem certeza de que não pode ser algo mais simples, porque no caso, este vídeo aqui ensina a fazer um sistema de caixa de diálogo e é bem simples, basta um script apenas:
Mas se caso o problema no seu seja o diálogo abrir e fechar porque você usa a mesma tecla para as duas ações existem duas saídas: ou criar duas teclas de ação, uma para abrir e outra para fechar, ou crie um botão separado para fechar o diálogo.
Caso queria continuar com a mesma tecla para as ações, crie um IEnumerator para esperar um pequeno espaço de tempo para fechar a caixa de diálogo, assim com esse delay ele vai executar uma ação primeiro que é abrir a caixa de diálogo, e depois se você pressionar a tecla de novo ele fecha, que é a segunda ação.
Mas eu realmente recomendo simplificar os Scripts atuais porque podem surgir outros problemas futuros e fica difícil realizar manutenção em 5 Scripts conectados. Um pode quebrar o outro em qualquer alteração.
Mas se caso o problema no seu seja o diálogo abrir e fechar porque você usa a mesma tecla para as duas ações existem duas saídas: ou criar duas teclas de ação, uma para abrir e outra para fechar, ou crie um botão separado para fechar o diálogo.
Caso queria continuar com a mesma tecla para as ações, crie um IEnumerator para esperar um pequeno espaço de tempo para fechar a caixa de diálogo, assim com esse delay ele vai executar uma ação primeiro que é abrir a caixa de diálogo, e depois se você pressionar a tecla de novo ele fecha, que é a segunda ação.
Mas eu realmente recomendo simplificar os Scripts atuais porque podem surgir outros problemas futuros e fica difícil realizar manutenção em 5 Scripts conectados. Um pode quebrar o outro em qualquer alteração.
Tópicos semelhantes
» aparece e desaparece apertando um tecla.
» [TUTORIAL] Usando Delegates em Unity - Sistema de caixa de diálogo!
» Som de correr fica muito rápido quando coloco no personagem e do PLAY
» Porque o meu gameobject desaparece?
» Pedestre se movimentado muito rápido.
» [TUTORIAL] Usando Delegates em Unity - Sistema de caixa de diálogo!
» Som de correr fica muito rápido quando coloco no personagem e do PLAY
» Porque o meu gameobject desaparece?
» Pedestre se movimentado muito rápido.
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos