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

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Avatar de l’utilisateur
jmhoubre
Messages : 851
Inscription : 05 Oct 2019 22:05

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

Message par jmhoubre » 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 :

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...
Dernière édition par jmhoubre le 17 Oct 2019 17:41, édité 1 fois.

Avatar de l’utilisateur
Max
Messages : 8765
Inscription : 30 Juil 2011 13:57
Contact :

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

Message par Max » 17 Oct 2019 17:25

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.
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Avatar de l’utilisateur
jmhoubre
Messages : 851
Inscription : 05 Oct 2019 22:05

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

Message par jmhoubre » 17 Oct 2019 17:40

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.

Avatar de l’utilisateur
Max
Messages : 8765
Inscription : 30 Juil 2011 13:57
Contact :

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

Message par Max » 17 Oct 2019 17:58

Pas de soucis.
Au moins ta crainte de mal dormir n'est plus fondée ;)
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Répondre

Revenir vers « (C#) CSharp »