Aide Jeu unity problème c# code programmation

Fermé
YouAreTheBest - 13 juil. 2023 à 23:25
 Utilisateur anonyme - 15 juil. 2023 à 00:27

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

A voir également:

3 réponses

YouAreTheBest
13 juil. 2023 à 23:35

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
Utilisateur anonyme
14 juil. 2023 à 08:43

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
Utilisateur anonyme
14 juil. 2023 à 08:44

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

0

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
Utilisateur anonyme
15 juil. 2023 à 00:27

As tu exécuté en pas à pas?


0