Search Unity

Ma reconnaissance de texte ne fonctionne pas avec un TextAsset

Discussion in 'Scripting' started by toadygamer, Nov 15, 2019.

  1. toadygamer

    toadygamer

    Joined:
    Dec 20, 2018
    Posts:
    5
    Bonjour, je voudrais créer que ce que je met dans l'InputField reconnaisse ce que je mette dans mon texte.
    upload_2019-11-15_23-3-10.png
    Dans le dernier if, si "MotEnCours" est AVION et que "Entree" est AVION, cela ne marche pas. Ca ne marche pas seulement quand je vais chercher le mot dans mon .txt.
     
  2. Yoreki

    Yoreki

    Joined:
    Apr 10, 2019
    Posts:
    2,605
    Hi and welcome.
    First and foremost, please post your questions in english. Broken english is fine too, or you could even throw it into deepl.com to translate it pretty well, which is what i did to get a general idea of your problem. Secondly, please use code-tags, not screenshots, to post code examples. There is a sticky thread on this subforum explaining how, but effectively you can post using the <> button.

    Your problem most likely is that '==' compares reference equalite, while you should be using .Equals(), which compares contents. If you have two strings which are equal, they dont have to be the same (reference wise), which is the case for you. If it does not work with Entree.text.Equals(MotEnCours.text), then i would use Debug.Log() to print the contents to make sure they are even actually the same.

    Also, unless you are absolutely sure that your code will never be seen by another person, or it's a programm that can only be used for very niche things that only exist in your country, i would highly recommend writing variable names in english. First and foremost, this adds consistency to all the pre-existing code you are using (.Split(), GetKeyDown(), KeyCode, .text, int, string, InputField, ... and so on), and also makes it a lot easier for others to read your code - which is helpful if you require help from others. Writing comments in your own language is not optimal either, but less confusing than non-english variable names. Imagine your variables were all just called "abc", "xyz" or "something". That's how the code reads for non-french people. If the question was more complicated, or the code was longer, i highly doubt anybody outside of france could have helped you, which highly limits the reach of your question to a very small percentage of users on this (or any other) forum.

    Anyways, i hope this helps. :)

    ========== Deepl.com translated version to french: =================
    Bonjour et bienvenue.
    D'abord et avant tout, postez vos questions en anglais. Broken anglais est très bien aussi, ou vous pourriez même le jeter dans deepl.com pour le traduire assez bien, ce qui est ce que j'ai fait pour avoir une idée générale de votre problème. Deuxièmement, veuillez utiliser des balises de code, et non des captures d'écran, pour afficher des exemples de codes. Il y a un fil collant sur ce sous-forum expliquant comment, mais efficacement vous pouvez poster en utilisant le bouton <>.

    Votre problème le plus probable est que'==' compare equalite de référence, alors que vous devriez utiliser .Equals(), qui compare les contenus. Si vous avez deux chaînes de caractères égales, elles n'ont pas besoin d'être les mêmes (référence), ce qui est le cas pour vous. Si cela ne fonctionne pas avec Entree.text.Equals(MotEnCours.text), alors j'utiliserais Debug.Log() pour imprimer le contenu pour m'assurer qu'il est bien le même.

    Aussi, à moins que vous ne soyez absolument sûr que votre code ne sera jamais vu par une autre personne, ou qu'il s'agisse d'un programme qui ne peut être utilisé que pour des choses très spécialisées qui n'existent que dans votre pays, je vous recommande fortement d'écrire les noms des variables en anglais. Tout d'abord, cela ajoute de la cohérence à tout le code préexistant que vous utilisez (.Split(), GetKeyDown(), KeyCode,.text, int, string, InputField, .... et ainsi de suite), et rend la lecture de votre code beaucoup plus facile pour les autres - ce qui est utile si vous avez besoin d'aide des autres. Ecrire des commentaires dans votre propre langue n'est pas non plus optimal, mais moins déroutant que des noms de variables non anglais. Imaginez que vos variables s'appelaient toutes "abc", "xyz" ou "quelque chose". C'est comme ça que le code se lit pour les non-français. Si la question était plus compliquée, ou si le code était plus long, je doute fort que quelqu'un en dehors de la France aurait pu vous aider, ce qui limite fortement la portée de votre question à un très petit pourcentage d'utilisateurs sur ce forum (ou tout autre).

    Quoi qu'il en soit, j'espère que ça aidera. :)

    Traduit avec www.DeepL.com/Translator
     
  3. toadygamer

    toadygamer

    Joined:
    Dec 20, 2018
    Posts:
    5
    ok sorry, it's my first threads ^^'

    Code (CSharp):
    1. public class Script : MonoBehaviour
    2. {
    3.     public TextAsset textFile;
    4.     public Text displayWord;
    5.     public InputField inputWord;
    6.     public int line;
    7.     public string[] textLines;
    8.  
    9.     void Start()
    10.     {
    11.         if(textFile != null)
    12.         {
    13.             textLines = (textFile.text.Split('\n'));    //To have the line of the .txt
    14.         }
    15.     }
    16.  
    17.     void Update()
    18.     {
    19.         if (textFile != null)
    20.         {
    21.             textLines = (textFile.text.Split('\n'));
    22.         }
    23.  
    24.         displayWord.text = textLines[line];              //To take the work of .txt and writte this in "displayWord"
    25.  
    26.                                                          //If the word displayed is the same written in "inputWord"
    27.         if (inputWord.text == displayWord.text)
    28.         {
    29.             Debug.Log("It's work !");
    30.             line++;
    31.             inputWord.text = "";
    32.         }
    33.                                                         //A other try
    34.         if (inputWord.text.Equals(displayWord.text))
    35.         {
    36.             Debug.Log("It's work ! 2");
    37.             line++;
    38.             inputWord.text = "";
    39.         }
    40.  
    41.         Check();
    42.     }
    43.  
    44.     public void Check()
    45.     {
    46.         if (Input.GetKeyDown(KeyCode.A))
    47.         {
    48.             Debug.Log(displayWord.text);
    49.         }
    50.  
    51.         if (Input.GetKeyDown(KeyCode.E))
    52.         {
    53.             Debug.Log(inputWord.text);
    54.         }
    55.     }
    56. }
    I try with inputWord.text.Equals(displayWord.text) but he don't work.
    When I debug what is the text in displayWord, I have my first word ( who is AA ).
    Now, if i writte this word in my inputWord and i debug this, i have AA.

    So i don't know why that don't work :/
     
  4. Yoreki

    Yoreki

    Joined:
    Apr 10, 2019
    Posts:
    2,605
    If you add
    Code (CSharp):
    1. Debug.Log("." + inputWord.text + ".");
    2. Debug.Log("." + displayWord.text + ".");
    and they are the same, but not recognized by Equals, then maybe there is some invisible symbol like a linebreak or something contained. I added the dots before and after the word.text so you would see, for example, spaces.