[Résolu] Comportement étrange d'un Prefab
Publié : 17 Oct 2019 17:17
Bonjour,
j'ai le chic pour tomber sur des trucs qui me dépassent^^
Un petit tuto d'Unity sur static, je l'essaie donc en toute confiance.
Voilà le script :
La seule modification que j'ai apportée, c'est d'ajouter MonoBehaviour pour pouvoir attacher le script et la fonction Awake pour afficher la variable statique.
Sur la scène, je mets un cube, avec ce script, et il m'affiche qu'il y a 2 ennemis. J'avoue rester sec : pourquoi 2 et pas 1 ? Quelque soit le nombre de cube avec script, j'ai le double comme résultat du Debug.Log.
Après, j'ai essayé autre chose : j'ai fait un prefab avec mon cube sans le script, et je crée des instances depuis un autre script, instances auxquelles j'ajoute le script :
La cela fonctionne, le nombre d'ennemis affiché est correct.
Mais je n'ai pas trouvé l'erreur faite lors du 1er essai. Un cube scripté mis sur la scène lance-t-il son constructeur ? J'ai du laisser passer un truc de débutant^^
Arf, je sens que je vais mal dormir...
j'ai le chic pour tomber sur des trucs qui me dépassent^^
Un petit tuto d'Unity sur static, je l'essaie donc en toute confiance.
Voilà le script :
Code : Tout sélectionner
using UnityEngine;
public class Enemy : MonoBehaviour {
// Les variables static sont partagées entre toutes les instances de la classe.
public static int enemyCount = 0;
public Enemy() {
// Met à jour la variable static à la création d'un ennemi.
enemyCount += 1;
}
private void Awake() {
Debug.Log(gameObject.name + " : il y a " + enemyCount + " ennemi(s).");
}
}
Sur la scène, je mets un cube, avec ce script, et il m'affiche qu'il y a 2 ennemis. J'avoue rester sec : pourquoi 2 et pas 1 ? Quelque soit le nombre de cube avec script, j'ai le double comme résultat du Debug.Log.
Après, j'ai essayé autre chose : j'ai fait un prefab avec mon cube sans le script, et je crée des instances depuis un autre script, instances auxquelles j'ajoute le script :
Code : Tout sélectionner
void Start() {
// Création de quelques ennemis.
for (int i = 0; i < 5; i++) {
GameObject go = Instantiate(
PrefabToInstantiate,
transform.position + Vector3.forward * 1.5f * i,
Quaternion.identity);
go.AddComponent(typeof(Enemy));
go.name = "Ennemi" + i.ToString();
}
}
Mais je n'ai pas trouvé l'erreur faite lors du 1er essai. Un cube scripté mis sur la scène lance-t-il son constructeur ? J'ai du laisser passer un truc de débutant^^
Arf, je sens que je vais mal dormir...