Jump to content
UnitySpain
B-£otus

¿Mejor método para un sistema de diálogo?

Recommended Posts

¡Buenas! Estoy empezando a crear un sistema de diálogo, y por ahora me limito a hacer pruebas, y se me ocurrieron dos ideas.

Extraer el texto de un .txt

Crear un txt que siguiera ciertas reglas e ir sacando el texto de el.

Esta me agrada para editar más fácilmente el texto, traducir rápidamente y cosas similares, pero es más liosa.

Por ejemplo:

@texto1
{
    [Juan]
    Hay algo que no me gusta.
}

@texto2
{
    [Pedro]
    X2.
}

Un método que recibe un string como parámetro.

Usar un string para mostrar en el TextBox.

Por ejemplo:

void MsgBox(string text)
{
	instrucciones;
}

¿Cuál creen que es la mejor forma de hacerlo?

Share this post


Link to post
Share on other sites
7 hours ago, ¥-Shido said:

¿Cuál creen que es la mejor forma de hacerlo?

Falta más info para contestar eso, sobretodo de la segunda, ya que ese método por si solo no dice nada, no se.

Explicá paso a paso como creas un dialogo (está en tu cabeza o en la cabeza de algun guionista tuyo y termina parando en una string de C# por ejemplo) y como lo mostras (no es relevante pero si querés) y te vas a dar cuenta qué método es mejor.

 

Share this post


Link to post
Share on other sites

las conversaciones pueden variar? se pueden escoger opciones de dialogo?

en realidad he tocado poco los dialogos.... pero creo que hace falta un poco mas de informacion para que te puedan ayudar...

Share this post


Link to post
Share on other sites

Para reiterar el título de este hilo, ¿cuál es la mejor manera de crear un sistema de diálogo? No estoy buscando nada sofisticado con una tonelada de personalización. Solo quiero saber la mejor forma de estructurar el clásico diálogo RPG. 

Este estilo generalmente consiste en una imagen para cada personaje participante, opciones de Diálogo que pueden ramificarse en diferentes segmentos de diálogo y un sonido que se reproduce cada vez que un personaje comienza a hablar (generalmente un sonido "jadeo" o "huh" para reaccionar a los personajes anteriores). 
Ejemplo:

Sin título.png

Realmente quiero separar el código y el diálogo.

Quiero tener un conjunto de conversaciones que cualquier personaje en el juego pueda retomar. Estaba pensando que tiene sentido almacenar estas conversaciones en JSON o ScriptableObjects.

Por eso me preguntaba: ¿Es mejor usar Json o ScriptableObjects?

PD: Solo quiero usarlos para leer los datos almacenados en estos, no guardar datos.

Share this post


Link to post
Share on other sites

@B-£otus

Lo que yo te recomendaría seria hacer un array de string o Text y que fueras leyendo uno a uno  cada numero de la lista  cuando llegue al final salga de ciclo.

if(AuxNum >= arraytexto[i].lengt )

{

//sal del ciclo

AuxNum = 0;

}

else  if( input.botton.space &&  condición activador de texto == true)

{

text.text = arraytexto[AuxNum];

auxNum++;

}

Recomendación usa el método ienumerator es tu mejor amigo.

Share this post


Link to post
Share on other sites
hace 14 minutos, Ness said:

@B-£otus

Lo que yo te recomendaría seria hacer un array de string o Text y que fueras leyendo uno a uno  cada numero de la lista  cuando llegue al final salga de ciclo.


if(AuxNum >= arraytexto[i].lengt )

{

//sal del ciclo

AuxNum = 0;

}

else  if( input.botton.space &&  condición activador de texto == true)

{

text.text = arraytexto[AuxNum];

auxNum++;

}

Recomendación usa el método ienumerator es tu mejor amigo.

Si, así lo estoy haciendo xD

Mi duda es: ¿Almacenar esas strings en Json o ScriptableObject?

Edited by B-£otus

Share this post


Link to post
Share on other sites

todo eso depende de que díalogos quieres hacer, tienen diferentas respuestas? es una conversación lineal?
aunque sea lineal, por ahora, mas adelante puede que quieras poner diferentes respuestas, mejor programar eso una sola vez,

hacerlo "complicado" te quita mucho trabajo a la larga.

puedes usar json, o guardar en binario, eso depende de lo que quieras hacer.

multilenguaje? mejor piensa todo bien al principio antes de ponerte a programar a lo loco xd

pd: puedes "extraer" el díalogo del código, lo mas utilizado en estos casos es poner los díalogos en XML con sus etiquetas puedes hacer las diferentes respues y facilitas el trabajo de traducción

Share this post


Link to post
Share on other sites

Tengo Una duda, Como realizo el efecto que tienen los sistemas de dialogos que las letras aparecen una por una con cierto efecto, en el mismo dialogo Como en este gif, se me ocurrio que podia usar ciclo for pero no estoy seguro del rendimiento (no encontre otro gif que representara mi duda) [Advertencia Spoilers de Undertale]

https://pa1.narvii.com/6219/445e6b4006db613a14c249756c3c430517305aab_hq.gif

Share this post


Link to post
Share on other sites
hace 27 minutos, Marlos said:

Tengo Una duda, Como realizo el efecto que tienen los sistemas de dialogos que las letras aparecen una por una con cierto efecto, en el mismo dialogo Como en este gif, se me ocurrio que podia usar ciclo for pero no estoy seguro del rendimiento (no encontre otro gif que representara mi duda) [Advertencia Spoilers de Undertale]

https://pa1.narvii.com/6219/445e6b4006db613a14c249756c3c430517305aab_hq.gif

Se hace con corrutinas.

Ejemplo:

IEnumerator AnimarTexto(string textoCompleto)
    {
        int i = 0;
        text.text = "";
        while (i < textoCompleto.Length)
        {
            text.text += textoCompleto[i++];
            yield return new WaitForSeconds(0.02F); //Tiempo de espera entre letras.
        }
    }

Para iniciarla:

 StartCoroutine(AnimarTexto(texto));

 

Share this post


Link to post
Share on other sites
On 8/5/2018 at 9:02 PM, B-£otus said:

Se hace con corrutinas.

Ejemplo:


IEnumerator AnimarTexto(string textoCompleto)
    {
        int i = 0;
        text.text = "";
        while (i < textoCompleto.Length)
        {
            text.text += textoCompleto[i++];
            yield return new WaitForSeconds(0.02F); //Tiempo de espera entre letras.
        }
    }

Para iniciarla:


 StartCoroutine(AnimarTexto(texto));

 

Gracias

Share this post


Link to post
Share on other sites

Tengo otra duda que llevo tiempo sin saber qué hacer: cómo hacer una conversación, si suena estupido, pero me refiero a como hacer una conversación multidireccional, ya que lo que he hecho hasta ahora es que cada vez que el jugador se acerque, el NPC empieza a hablar y al presionar espacio continua (como es normal) pero mi duda es como hago para que hable el personaje después que el NPC termine de hablar, Que sea capaz de responder y mantener, por así decirlo una conversación. Disculpen la molestia de ante mano  Screenshot_3.png  

Share this post


Link to post
Share on other sites

×
×
  • Create New...