Je travaille sur un jeu de tir spatial 2D, et j'ai fait un powerup qui ne fonctionne pas.NullRefExc lorsque trieing pour définir la valeur de la classe dans un tableau de classes, pourquoi?
Le vaisseau du joueur a 3 GameObjects attachés, 3 canons. Le script powerUp stocke les configurations de pistolet et quand le PowerUp entre en collision avec le joueur, le joueur obtient la configuration de pistolet du PowerUp, puis le détruit. Le PowerUp change périodiquement, d'où la procédure CyclePowers()
.
Je stocke les configurations dans les procédures qui sont exécutées lors de la création du PowerUp. Ils définissent les valeurs de leurs classes appropriées.
Le problème est qu'une NullReferenceException est levée lorsqu'elle essaie de définir la valeur.
erreur est:
NullReferenceException: Object reference not set to an instance of an object PowerUp.SetupGunLaserSettings() (at Assets/PowerUp.cs:131) PowerUp.Start() (at Assets/PowerUp.cs:30)
Je pense que le problème est que la classe n'existe pas quand il tente de définir sa valeur. Pourquoi, je ne sais pas. Je suis un débutant en C#, donc mon hypothèse est probablement erronée. Voici le code:
using UnityEngine;
using System.Collections;
public class PowerUp : MonoBehaviour {
// Use this for initialization
void Start() {
SetupGunLaserSettings();
SetupGunLaser2Settings();
powerType = powerCount;
InvokeRepeating("CyclePowers", 0.000001f, cycleRate);
}
public class gunSettings{
public string name;
//ETC
}
public class gunS{
public gunSettings gunSNose = new gunSettings();
//ETC
}
private gunS[] gunLaser = new gunS[3]; //powerType '0'
void SetupGunLaserSettings(){
for (int i = 0; i <= 2; i++) {
gunLaser[i].gunSNose.weaponActive = true; //This is where the exception is thrown.
//ETC
}
}
}
Veuillez réduire ceci à un [mcve]. Il y a un * lot * de code ici, presque tout ce qui est probablement hors de propos. Mais je ne vois aucun code où vous remplissez le tableau. (Vous ne créez jamais d'instance de la classe 'gunS'.) –
Veuillez publier un exemple [Minimal, Complete et vérifiable] (https://stackoverflow.com/help/mcve). En d'autres termes s'il vous plaît affiner votre problème en supprimant tout le fouillis. – Sach
En haut de votre boucle 'for', vous devez créer les instances de la classe' gunS'. Essayez d'ajouter cette ligne juste à l'intérieur de votre boucle 'for':' gunLaser [i] = new gunsS(); ' –