Page 1 sur 1

[Résolu] Comportement étrange d'un Prefab

Publié : 17 Oct 2019 17:17
par jmhoubre
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 :

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).");
    }
}
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 :

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();
        }
}
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...

Re: [DB] Comportement étrange d'un Prefab

Publié : 17 Oct 2019 17:25
par Max
Bonjour,

Il est très fortement déconseillé d'utiliser des constructeurs avec les classes dérivant de Monobehaviour.
Awake et éventuellement Start sont là pour cela.
En guise d’exemple d'explication: Don't Use Constructors To Initialize Monobehaviours.

Re: [DB] Comportement étrange d'un Prefab

Publié : 17 Oct 2019 17:40
par jmhoubre
Merci pour l'article. Effectivement, c'est assez clair maintenant.
J'avais remarqué qu'en sortant du mode Play, j'avais des affichages supplémentaires, mais déjà occupé par un problème, j'ai laissé de côté. Donc tu as répondu à deux question d'un coup.

Re: [Résolu] Comportement étrange d'un Prefab

Publié : 17 Oct 2019 17:58
par Max
Pas de soucis.
Au moins ta crainte de mal dormir n'est plus fondée ;)