Aide Jeu unity problème c# code programmation

YouAreTheBest -  
 Utilisateur anonyme -

Bonjour;

j'ai un problème dans un de maïs script de mon jeu sur UNITY. mon jeu est un jeu "attrape ball". Donc une boîte qui attrape des balles et qui fait augmenter un score ui legacy. pour cela j'ai placé 6 boîtes différentes, ils sont tous désactivés  sauf une et quand une ball rentre dans une des boîtes le score augmente de +5. quand mon score = à 15 la boîte qui était activée se désactive et active la boîte count 15. pareilles pour le score = 30, puis 50, 70 et 85. le problème ses que quand la boîte se désactive et active une autre, la nouvelle boite réinitialise le score à 0 et cela fait rendre les jeux buger par la suite. Merci de m'aider.


Windows / chrome 114.0.0.0

3 réponses

  1. YouAreTheBest
     

    le script

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    
    public class Counter : MonoBehaviour
    {
        public Text counterText;
        public List<GameObject> prefabList; // Liste des objets associés aux valeurs du compteur
        public GameObject lightObject;
    
        private int count = 0;
        private int lastActivatedIndex = -1; // Index du dernier prefab activé
    
        private void Start()
        {
            counterText.text = "Count : " + count;
            lightObject.SetActive(false);
        }
    
        private void Update()
        {
            if (Input.GetKeyUp(KeyCode.Space))
            {
                IncreaseCount();
            }
        }
    
        private void OnTriggerEnter(Collider other)
        {
            IncreaseCount();
            lightObject.SetActive(true);
            StartCoroutine(ExampleCoroutine());
        }
    
        private void IncreaseCount()
        {
            count += 5;
            counterText.text = "Count : " + count;
    
            if (lastActivatedIndex >= 0 && lastActivatedIndex < prefabList.Count)
            {
                // Désactiver le prefab précédemment activé
                prefabList[lastActivatedIndex].SetActive(false);
            }
    
            if (count == 15)
            {
                DisablePrefab(0);
                EnablePrefab(1);
                count = 15;
            }
            else if (count == 30)
            {
                DisablePrefab(1);
                EnablePrefab(2);
                count = 30;
            }
            else if (count == 50)
            {
                DisablePrefab(2);
                EnablePrefab(3);
                count = 50;
            }
            else if (count == 70)
            {
                DisablePrefab(3);
                EnablePrefab(4);
                count = 70;
            }
            else if (count == 85)
            {
                DisablePrefab(4);
                EnablePrefab(5);
                count = 85;
            }
        }
    
        private void EnablePrefab(int index)
        {
            if (index >= 0 && index < prefabList.Count)
            {
                // Activer le prefab correspondant à l'index
                prefabList[index].SetActive(true);
                count = index * 15;
            }
        }
    
        private void DisablePrefab(int index)
        {
            if (index >= 0 && index < prefabList.Count)
            {
                // Désactiver le prefab correspondant à l'index
                prefabList[index].SetActive(false);
            }
        }
    
        private IEnumerator ExampleCoroutine()
        {
            yield return new WaitForSeconds(5);
            lightObject.SetActive(false);
        }
    }
    
    0
  2. Utilisateur anonyme
     

    Bonjour 


    pour tes prochains posts, merci de choisir csharp pour la coloration syntaxique comme décrit là https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code


    La réponse à ta question se trouve là 

        private void EnablePrefab(int index)
        {
            if (index >= 0 && index < prefabList.Count)
            {
                // Activer le prefab correspondant à l'index
                prefabList[index].SetActive(true);
                count = index * 15; // il ne faut pas recalculer count ici
            }
        }

    (T.as vu c'est quand même plus agréable à lire que le pavé geris que tu as posté)

    Ce que tu aurais pu trouver par toi même, en executant le code pas à pas et en espionnant le contenu de count.

    Sais tu utiliser les outils de déboggage, quand on code surtout au début c'est plus important que de connaître les mots clés par cœur ?
     

    D'autre part, dans ce bloc, il y a du code inutile 

            if (count == 15)
            {
                DisablePrefab(0);
                EnablePrefab(1);
                count = 15; //cette ligne ne sert à rien count vaut déjà 15
            }
            else if (count == 30)
            {
                DisablePrefab(1);
                EnablePrefab(2);
                count = 30; //cette ligne ne sert à rien count vaut déjà 30
            }
            else if (count == 50)
            {
                DisablePrefab(2);
                EnablePrefab(3);
                count = 50; //cette ligne ne sert à rien count vaut déjà 50
            }
            else if (count == 70)
            {
                DisablePrefab(3);
                EnablePrefab(4);
                count = 70; //cette ligne ne sert à rien count vaut déjà 70
            }
            else if (count == 85)
            {
                DisablePrefab(4);
                EnablePrefab(5);
                count = 85; //cette ligne ne sert à rien count vaut déjà 85
            }


     


    0
    1. Utilisateur anonyme
       

      PS: c'est quoi l'intérêt d'avoir plusieurs boites ?

      0
    2. YouAreTheBest
       

      Bonjour, j'ai modifié les modifications que tu ma donner et cela na rien a changer. Pour répondre à ta question l'intérêt d'avoir plusieurs boîtes est que plus que le count augment apartir du score 15 ou 30, 50, 70 et 85 plus que le score, count augmente les autres boite vont s'activer et les autres boite sont de moins en  moins grands et éclairante pour augmenter la difficulté.

      0
  3. Utilisateur anonyme
     

    As tu exécuté en pas à pas?


    0