[ad_1]
J’ai un bouton sur lequel chaque pression active une structure et à la dernière structure, le bouton est devenu désactivé
mais quand j’arrive au clic 4# (plage de structure 0-4), j’obtiens cette erreur dans Unity
“ArgumentOutOfRangeException : l’index était hors plage. Doit être non négatif et inférieur à la taille de la collection”
c’est mon code
1 <pre>using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 5 public class VillageStructure : MonoBehaviour 6 { 7 public List<GameObject> structureLevels; 8 public GameObject buildButtonEnabled; 9 public GameObject buildButtonDisabled; 10 public GameObject buildEffect; 11 12 int currentLevel; 13 14 15 // Start is called before the first frame update 16 void Start() 17 { 18 currentLevel = 0; 19 } 20 21 // Update is called once per frame 22 void Update() 23 { 24 if (currentLevel >= structureLevels.Count || currentLevel < 0) 25 { 26 buildButtonEnabled.SetActive(false); 27 buildButtonDisabled.SetActive(true); 28 } 29 } 30 31 public void BuildStructure() 32 { 33 if (currentLevel < structureLevels.Count) 34 { 35 buildButtonEnabled.SetActive(true); 36 buildButtonDisabled.SetActive(false); 37 38 if (currentLevel > 0) 39 { 40 structureLevels[currentLevel - 1].SetActive(false); 41 } 42 43 structureLevels[currentLevel].SetActive(true); 44 45 // If you have an Animator component on the current structure level 46 Animator anim = structureLevels[currentLevel].GetComponent<Animator>(); 47 if (anim != null) 48 { 49 // Play animation or do other animation-related actions 50 } 51 52 currentLevel++; 53 } 54 else 55 { 56 buildButtonEnabled.SetActive(false); 57 buildButtonDisabled.SetActive(true); 58 } 59 } 60 }
Qu’est-ce qui ne va pas? :\
Ce que j’ai essayé :
j’ai essayé de modifier la section de mise à jour avec
if (currentLevel >= structureLevels.Count || currentLevel < 0 || currentLevel > 4) { buildButtonEnabled.SetActive(false); buildButtonDisabled.SetActive(true); }
mais pas de succès
Solution 1
Vous obtenez une erreur d’index hors plage lorsque vous essayez d’accéder à un élément du tableau qui n’existe pas.
En C#, les tableaux sont de base zéro, donc un tableau de N
les éléments avec des index valides entre 0
et (N - 1)
uniquement : un tableau de trois éléments comme celui-ci :
int[] data = new int[] {1, 2, 3};
J’aurai des index valides de 0
, 1
et 2
seulement. Et un index négatif ou supérieur à 2 vous donnera l’erreur.
Depuis un
List<T>
est construit sur un ensemble de T
valeurs, cela s’applique également à eux.
Très probablement, c’est cette ligne qui lève l’exception :
structureLevels[currentLevel].SetActive(true);
Parce que même si vous recherchez une liste vide au-dessus, vous exécutez quand même la ligne de code.
Mettez un point d’arrêt sur cette ligne et regardez la valeur de currentLevel
et le contenu de structureLevels
pour voir à quoi vous avez exactement affaire : soit currentLevel
est trop grand, ou structureLevels
est vide. Puisque vous n’attribuez pas de nouveau List<GameObject>
à structureLevels
dans ce code, nous ne pouvons avoir aucune idée du nombre d’éléments qu’il peut contenir !
[ad_2]
コメント