2 votes

Stockage de référence à un prefab dans une variable via un script (non par l'éditeur/inspecteur)

Je suis en train d'instancier un préfabriqué de pièce qui apparaît quand un ennemi meurt.

Pour obtenir initialement une référence au préfabriqué, je l'ai récupéré en utilisant sa balise :

private GameObject coinSpawn;
Start(){
    coinSpawn = GameObject.FindGameObjectWithTag("xxx");
} 

Maintenant, quand l'ennemi meurt, j'appelle Instantiate() de la manière suivante :

Instantiate(coinSpawn, transform.position, Quaternion.identity);

Cependant, lorsque je jouais et qu'un ennemi est mort, rien n'était instancié et j'ai obtenu cette erreur :

ArgumentException: L'objet que vous souhaitez instancier est nul.

Je ne comprends pas ce que j'ai fait de mal - j'ai confirmé que j'ai correctement balisé le préfabriqué que je veux instancier.

Une autre chose est que je veux faire cela sans créer de dossier Resources. Est-ce possible ?

0voto

Serlite Points 3098

Malheureusement, GameObject.FindGameObjectWithTag() ne récupère que les GameObjects actifs avec le tag donné qui existent déjà dans la scène actuelle. Il semble que vous essayez d'utiliser cette méthode pour récupérer une référence à un objet prefab dans votre dossier Assets, ce qu'elle ne peut pas faire. En conséquence, la méthode renvoie null et l'assigne à coinSpawn, entraînant une erreur lorsque vous essayez d'utiliser coinSpawn plus tard.

Vous avez probablement besoin de la Resources.Load() méthode, à laquelle vous pouvez fournir un chemin vers un objet dans votre dossier Assets. Utilisez simplement cela à la place de GameObject.FindGameObjectWithTag():

private GameObject coinSpawn;
Start(){
    coinSpawn = Resources.Load("chemin_vers_prefab") as GameObject;
}

Et oui - vous devrez utiliser le nom du prefab au lieu de son tag pour l'identifier, mais je ne pense pas que cela devrait poser de problèmes. (Si c'est le cas, veuillez mettre à jour votre question avec une explication.)

J'espère que cela vous aidera! Faites-moi savoir si vous avez des questions.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X