Page 1 sur 2

[DB-AL] Dialogue

Publié : 23 Mai 2019 16:52
par Emilie24
Bonjour,

Je cherche à faire un système de dialogue. J'ai trouvé un bon tuto qui reprend le style de dialogue que je souhaite faire. Par contre, il y a des choses que je dois modifier. Mais vu que je débute en programmation, je n'arrive pas à avoir le résultat que je souhaite. J'y ai passé mon après midi en tentant le plus de choses possibles, mais rien à faire. Tout d'abord, je souhaite qu'en utilisant la barre espace, le dialogue continue. Dans les commentaires du tuto, ils conseillent d'utiliser Debug.Log mais quelle méthode dois-je utiliser, que dois je mettre entre parenthèses ? Ensuite, je souhaite utiliser la fonction OnTriggerEnter2D. Mais lorsque mon personne s'approche du PNJ, le dialogue ne se déclenche pas. Pourtant j'ai bien attaché à ce PNJ un box collider 2D. Voici le code :

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;

public class Dialog : MonoBehaviour
{
    public TextMeshProUGUI textDisplay;
    public string[] sentences;
    private int index;
    public float typingSpeed;
    

    public GameObject continueButton;

    private void OnTriggerEnter2D(Collider2D)
    {
        StartCoroutine(Type());
    
    }
    void Update()
    {
        if(textDisplay.text == sentences[index])
        {
            continueButton.SetActive(true);

        }

        if (Input.GetKey(KeyCode.Space))
        {

            Debug.Log();
           
        }

    }
    IEnumerator Type()
    {
        foreach (char letter in sentences[index].ToCharArray())
        {
            textDisplay.text += letter;
            yield return new WaitForSeconds(typingSpeed);
        }

    }

    public void NextSentence()
    {
        continueButton.SetActive(false);
        if (index < sentences.Length - 1)
        {
            index++;
            textDisplay.text = "";
            StartCoroutine(Type());
        }else{
            textDisplay.text = "";
        }
        }
    }
Je viens chercher votre aide car là je désespère. Merci d'avance

Re: [DB-AL] Dialogue

Publié : 23 Mai 2019 17:58
par Max
Bonsoir Emilie24,

Déjà quel est le tuto que tu as essayé de suivre ? Cela aiderais un peu puor y voir plus cliar sur certains points.
En suite, concernant l'entré dans le trigger, c'est toujours même conseil: place un Debug.Log dans ta fonction
pour bien confirmer (ou pas) cette affirmation. Le soucis vient peut-être de la coroutine appelée.
En suite, la touche space est certainement destinée à déclencher une action. Quel rapport avec un Debug.Log,
qui ne fera qu'afficher un message dans la console, mais qui n'aura aucune incidence sur le cour du jeu et donc des
potentiels dialogues à afficher ?

Re: [DB-AL] Dialogue

Publié : 23 Mai 2019 18:30
par Emilie24
Merci pour ta réponse. Effectivement j'ai oublié de mettre le lien du tuto.
C'est ce tuto là : https://www.youtube.com/watch?v=f-oSXg6_AMQ

Que me conseillerais tu de faire alors pour la touche space ?

Re: [DB-AL] Dialogue

Publié : 23 Mai 2019 18:48
par Max
Emilie24 a écrit :
23 Mai 2019 18:30
Que me conseillerais tu de faire alors pour la touche space ?
si tu souhaites afficher le dialogue suivant, il faut appeler la fonction dédiée: NextSentence() .

Re: [DB-AL] Dialogue

Publié : 23 Mai 2019 19:36
par Emilie24
Alors voilà les modifications :

Il y a du mieux mais c'est pas encore ça. J'ai la deuxième phrase et troisième phrase du dialogue qui s'affiche si j'appuie sur espace. Par contre la première ne s'affiche tjs pas à l'approche du personnage.

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;

public class Dialog : MonoBehaviour
{
    public TextMeshProUGUI textDisplay;
    public string[] sentences;
    private int index;
    public float typingSpeed;


    public GameObject continueButton;

    private void OnTriggerEnter2D(Collider2D collider2D)
    {
        StartCoroutine(Type());

    }
    void Update()
    {
        if (textDisplay.text == sentences[index])
        {
            continueButton.SetActive(true);

        }

        if (Input.GetKeyDown(KeyCode.Space))
        {

            NextSentence();

        }

    }
    IEnumerator Type()
    {
        foreach (char letter in sentences[index].ToCharArray())
        {
            textDisplay.text += letter;
            yield return new WaitForSeconds(typingSpeed);
        }

    }

    public void NextSentence()
    {
        continueButton.SetActive(false);
        if (index < sentences.Length - 1)
        {
            index++;
            textDisplay.text = "";
            StartCoroutine(Type());
        }
        else
        {
            textDisplay.text = "";
        }
    }
}

Re: [DB-AL] Dialogue

Publié : 23 Mai 2019 20:28
par Max
As-tu vérifié que tu rentrais bien dans la fonction OnTriggerEnter2D ?

Code : Tout sélectionner


    private void OnTriggerEnter2D(Collider2D collider2D)
    {
        Debug.Log("OK OnTriggerEnter2D");
        StartCoroutine(Type());
    }

Re: [DB-AL] Dialogue

Publié : 23 Mai 2019 20:40
par Emilie24
Je viens de vérifier et je n'ai rien dans la console.
Pourtant j'ai bien appliqué au PNJ un box collider 2D. Faut-il d'autres composants que j'aurais oublié ? :-|

Re: [DB-AL] Dialogue

Publié : 24 Mai 2019 07:30
par evereal
Vérifie si l'option "IsTrigger" est bien cochée sur le collider de ton pnj

Re: [DB-AL] Dialogue

Publié : 24 Mai 2019 13:11
par Emilie24
Oui c'est bien coché

Re: [DB-AL] Dialogue

Publié : 24 Mai 2019 13:30
par Max
Hello,

Pour que cela fonctionne. Il faut que sur ton GameObject PNJ tu ais: le script (listé plus haut et contenant le OnTriggerEnter2D()), un BoxCollider2D avec isTrigger coché.
Sur ton Player, tu dois avoir au moins un Collider2D et un RigidBody2D.