[DB-AL] Dialogue

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Emilie24
Messages : 13
Inscription : 17 Avr 2019 16:02

[DB-AL] Dialogue

Message par Emilie24 » 23 Mai 2019 16:52

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

Avatar de l’utilisateur
Max
Newser
Newser
Messages : 7335
Inscription : 30 Juil 2011 13:57

Re: [DB-AL] Dialogue

Message par Max » 23 Mai 2019 17:58

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 ?
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Emilie24
Messages : 13
Inscription : 17 Avr 2019 16:02

Re: [DB-AL] Dialogue

Message par Emilie24 » 23 Mai 2019 18:30

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 ?

Avatar de l’utilisateur
Max
Newser
Newser
Messages : 7335
Inscription : 30 Juil 2011 13:57

Re: [DB-AL] Dialogue

Message par Max » 23 Mai 2019 18:48

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() .
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Emilie24
Messages : 13
Inscription : 17 Avr 2019 16:02

Re: [DB-AL] Dialogue

Message par Emilie24 » 23 Mai 2019 19:36

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 = "";
        }
    }
}

Avatar de l’utilisateur
Max
Newser
Newser
Messages : 7335
Inscription : 30 Juil 2011 13:57

Re: [DB-AL] Dialogue

Message par Max » 23 Mai 2019 20:28

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());
    }
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Emilie24
Messages : 13
Inscription : 17 Avr 2019 16:02

Re: [DB-AL] Dialogue

Message par Emilie24 » 23 Mai 2019 20:40

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é ? :-|

Avatar de l’utilisateur
evereal
Messages : 109
Inscription : 06 Nov 2015 18:46

Re: [DB-AL] Dialogue

Message par evereal » 24 Mai 2019 07:30

Vérifie si l'option "IsTrigger" est bien cochée sur le collider de ton pnj
“La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !”

Emilie24
Messages : 13
Inscription : 17 Avr 2019 16:02

Re: [DB-AL] Dialogue

Message par Emilie24 » 24 Mai 2019 13:11

Oui c'est bien coché

Avatar de l’utilisateur
Max
Newser
Newser
Messages : 7335
Inscription : 30 Juil 2011 13:57

Re: [DB-AL] Dialogue

Message par Max » 24 Mai 2019 13:30

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.
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Répondre

Revenir vers « (C#) CSharp »