Impossible de faire une boucle d'activation de Game Objects

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Matocs
Messages : 32
Inscription : 22 Oct 2016 00:24

Impossible de faire une boucle d'activation de Game Objects

Message par Matocs » 29 Mai 2022 18:08

Bonjour a tous , voici mon problème , je voulais faire en sorte que mon personnage cligne des yeux de temps en temps donc pour ce faire j'ai d'abord créer une fonction Blink :

Code : Tout sélectionner

 void Update()
    {
        if (Input.GetKeyDown(KeyCode.Z))
        {
            print("blink");
            Blink();
        }
    
         

    } 

    IEnumerator Blink()
    {
      

        yeux1.SetActive(true);
        yield return new WaitForSeconds(1);
        yeux1.SetActive(false);
   
    

     
       
    }
j'ai donc voulu voir si elle fonctionnais en l'assignant a Z sauf que rien ne se passe la variable "yeux1 reste en false et ne passe pas en true puis en false au bout de 1 secondes a chaque fois que j'appuis sur Z.
J'ai également essayé de creer une bool "can_blink" et utiliser un while (can_blink == true){Blink()}
sauf que cela fait crash unity.
Merci d'avance de votre aide ;)

Matocs
Messages : 32
Inscription : 22 Oct 2016 00:24

Re: Impossible de faire une boucle d'activation de Game Objects

Message par Matocs » 29 Mai 2022 18:16

Code : Tout sélectionner

void Update()
    {
        if (Input.GetKeyDown(KeyCode.Z))
        {
            test1 = !test1;
        }
    
         while (test1 == true)
        {

            print("test");
        }

    } 
J'ai voulu faire une boucle de test et celle ci aussi fait crash mon éditeur je ne comprends pas pourquoi

Avatar de l’utilisateur
Max
Messages : 8771
Inscription : 30 Juil 2011 13:57
Contact :

Re: Impossible de faire une boucle d'activation de Game Objects

Message par Max » 29 Mai 2022 18:55

Bonjour,

ta fonction IEnumerator Blink() est une coroutine et donc son appel doit se faire normalement par le biais de StartCoroutine().

En suite,
Matocs a écrit :
29 Mai 2022 18:16

Code : Tout sélectionner

void Update()
    { 
         while (test1 == true)
        {
        }
    } 
ça jamais. Tu bloque l'Update qui reste coincé dans une boucle infini, se qui bloque toute ton application, d’où le crash.
Revoir à quoi correspond les callback d'Unity pour mieux cerner leurs rôles.
Image
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

Matocs
Messages : 32
Inscription : 22 Oct 2016 00:24

Re: Impossible de faire une boucle d'activation de Game Objects

Message par Matocs » 30 Mai 2022 00:54

ducoup je peux faire comment pour réaliser mon projet ?
en gros je souhaite que yeux 1 passe de actif a non actif avec 1 secondes entre les deux a chaque fois que la fonction blink est apellée

Matocs
Messages : 32
Inscription : 22 Oct 2016 00:24

Re: Impossible de faire une boucle d'activation de Game Objects

Message par Matocs » 30 Mai 2022 02:25

Code : Tout sélectionner

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

public class player_facial_animations : MonoBehaviour
{

    [Header("Bouches")]
    [Space(10)]
    public GameObject bouche1;
    public GameObject bouche2;
    public GameObject bouche3;
    public GameObject bouche4;
    public GameObject bouche5;
    public GameObject bouche6;
    public GameObject bouche7;
    public GameObject bouche8;
    public GameObject bouche9;
    public GameObject bouche10;
    public GameObject bouche11;
    public GameObject bouche12;
    public GameObject bouche13;
    public GameObject bouche14;
    public GameObject bouche15;
    public GameObject bouche16;
    public GameObject bouche17;
    [Space (10)]
    [Header("Yeux")]
    public GameObject yeux1;
    public GameObject yeux2;
    public GameObject yeux3;
    public GameObject yeux4;
    public GameObject yeux5;
    [Header("Sourcils")]
    public GameObject sourcil1;
    public GameObject sourcil2;
    public GameObject sourcil3;
    public GameObject sourcil4;
    public GameObject sourcil5;
    public GameObject sourcil6;



    public bool test1;


    void Start()
    {
        
        StartCoroutine(Blink());
        bouche1.SetActive(true);
        bouche2.SetActive(false);
        bouche3.SetActive(false);
        bouche4.SetActive(false);
        bouche5.SetActive(false);
        bouche6.SetActive(false);
        bouche7.SetActive(false);
        bouche8.SetActive(false);
        bouche9.SetActive(false);
        bouche10.SetActive(false);
        bouche11.SetActive(false);
        bouche12.SetActive(false);
        bouche13.SetActive(false);
        bouche14.SetActive(false);
        bouche15.SetActive(false);
        bouche16.SetActive(false);
        bouche17.SetActive(false);
        yeux1.SetActive(false);
        yeux2.SetActive(false);
        yeux3.SetActive(false);
        yeux4.SetActive(false);
        yeux5.SetActive(false);
        sourcil1.SetActive(true);
        sourcil2.SetActive(false);
        sourcil3.SetActive(false);
        sourcil4.SetActive(false);
        sourcil5.SetActive(false);
        sourcil6.SetActive(false);
        test1 = false;
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Z))
        {
            test1 = !test1;
            print("test");
            Blink();
        }
    
        

    } 

    IEnumerator Blink()
    {


        yeux1.SetActive(true);
        yield return new WaitForSeconds(1);
        yeux1.SetActive(false);
   
    

     
       
    }
}
voila mon code en entier si jamais ça peut aider

Répondre

Revenir vers « Scripting »