Script Inputfield : détecter la présence ou non de lettres.

Questions à propos du GUI, y compris la partie script.
CyrilDt
Messages : 5
Inscription : 17 Mars 2021 06:51

Script Inputfield : détecter la présence ou non de lettres.

Message par CyrilDt » 18 Mars 2021 06:40

Bonjour tout le monde !

Je suis nouveau ici et je commence à utiliser Unity et à apprendre les bases du C#.

J'ai un projet pour lequel j'ai déjà réussi à coder quelques fonctionnalités mais je bloque totalement sur une d'entre elle :

J'ai créé un inputfield (c'est un jeu ou l'on utilise des mots) et j'aimerais que selon les lettres inscrites dans l'inputfield des ligths spots assignés à ces dernières s'allument ou changent de couleur.

exemple :

Nous sommes au tour 1 et tous les spots sont éteints
si la lettre "a" est présente une fois dans le mot au moment ou le joueur écrit le mot un light spot s'allume en jaune (pour prévenir qu'en validant le mot avec enter et en passant au tour 2 la lettre "a" sera validée)
si le joueur appuie sur enter (pour passer au tour suivant) la lettre "a" est validée et le light spot s'allume alors en vert

Si la lettre "a" est présente 2 fois la lumière s'allume en jaune à la première saisie et à la deuxième elle s'allume en rouge (pour prévenir le joueur qu'elle ne sera pas validée car en double)
si le joueur appuie sur enter la lettre "a" n'est donc pas validée car en double et le light spot au tour 2 sera éteint.

l'idée c'est qu'une lettre présente :

1 fois valide
2 fois annule
3 fois valide
4 fois annule
etc.

bien sûr si le joueur supprime la lettre avant de valider les lumières doivent réagir en conséquence

Exemple :

Le joueur veut marquer le mot "pizza" mais fait une faute de frappe et écrit "pizzq". Le spot assigné à "q" va s'allumer et quand le joueur va supprimer la lettre le light spot s'éteindra. Le joueur remplacera le "q" par "a" et le spot assigné à "a" s'allumera.


Voici ce que j'ai fait pour le moment, le soucis étant que le code se lit à l'infini quand je rentre la lettre "a" dans mon inputfield donc les couleurs changent sans arrêt :

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.Linq;

public class VerifString1 : MonoBehaviour
{
    public InputField mainInputfield;
    public string myText;
    Color color0 = Color.yellow;
    Color color1 = Color.red;
    Color color2 = Color.green;
    Light lght;


    void Awake()
    {
        lght = GetComponent<Light>();

    }

    private void FixedUpdate()
    {
        myText = mainInputfield.text;

        if (myText.Contains("a") == true)
        {
            if (GetComponent<Light>().enabled == false)
            {

                lght.enabled = true;
                lght.color = color0;
                
            }

            else

                if (lght.color == color0)
            {
                lght.color = color1;
                
            }
            else
            {
                if (lght.color == color1)
                {
                    lght.color = color0;
                    
                }

                else
                {
                    if (lght.color == color2)
                    {
                        lght.color = color1;
                        
                    }
                }


            }






        }

        else
        {
            if (GetComponent<Light>().enabled == false)
            {

                lght.enabled = false;
                

            }

            else

                if (lght.color == color0)
            {
                lght.enabled = false;

            }
            
        }
    }


}

Je ne sais pas si l'idée est assez claire ? N'hésitez pas à me le dire si ce n'est pas le cas :)

je vous remercie d'avance pour votre aide !!

Répondre

Revenir vers « L'interface GUI »