[C#]Utiliser un script pour initialiser tous les autres ?

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Avatar de l’utilisateur
KassaK
Messages : 51
Inscription : 29 Sep 2014 14:27

[C#]Utiliser un script pour initialiser tous les autres ?

Message par KassaK » 20 Mars 2017 17:41

Hello !

J'ai aujourd'hui une ptite question concernant l'initialisation des différents scripts de mon projet. Je commence à en avoir quelques uns avec du coup des fonctions Start() et/ou Awake() à chaque fois.

J'ai commencé à avoir quelques soucis d'ordre d'initialisation que j'ai pu régler dans Unity avec le "Script Execution Order" mais là je commence à en voir les limites, ça commence à être un peu le bordel et demande pas mal de bidouille pour attendre qu'un Awake() se termine avant un autre par exemple.

J'ai donc pensé faire un script genre Init.cs, lancé au tout début, qui s'occupera lui de faire MANUELLEMENT d'initialiser les autres scripts. Je n'utiliserais donc plus les fonctions d'Unity Start() et Awake() mais des fonctions customs à chaque fois...est-ce une bonne solution ?

Comment faites vous dans vos projets ?

Je préfère poser la question car cela va me demander pas mal de travail pour reposer la base, et je préfère être sur d'utiliser une solution viable :)

Merci !

Avatar de l’utilisateur
Drakulo
Messages : 113
Inscription : 10 Mars 2017 22:49
Contact :

Re: [C#]Utiliser un script pour initialiser tous les autres ?

Message par Drakulo » 20 Mars 2017 19:31

Hello.

C'est quelque chose que je fais souvent dans mes projets pour pouvoir tester rapidement des scènes. J'ai un GameObject déclaré en DontDestroyOnLoad (un Prefab très exactement) qui initialise des valeurs et crée automatiquement des managers sur ma scène (traduction, contrôleurs, etc). S'il détecte qu'il est déjà sur la scène au lancement, il se supprime tout seul, et ça n'a aucune incidence sur le build final.

Donc si la modification de l'ordre d'exécution des scripts ne te suffit pas, alors oui ça peut être intéressant d'avoir un script qui initialise tes composants. Mais aussi pour la raison que j'ai donné plus haut. Le seul inconvénient est que c'est moins visible dans l'éditeur.
Fun Games Maker @TriplArt
Coach à esprit UNITY : Finissez vos jeux, vivez de votre passion
Enseignant de programmation / Unity3D à Bellecour Ecole

Avatar de l’utilisateur
Solup
Messages : 249
Inscription : 20 Mars 2013 18:41
Localisation : Toulouse (31)

Re: [C#]Utiliser un script pour initialiser tous les autres ?

Message par Solup » 21 Mars 2017 10:59

Hello,

Pour ma part j'utilise également un script "général" dans lequel j'utilise beaucoup de coroutine, en autre parce que je récupère souvent des infos depuis une BD et que forcément il faut attendre que les infos arrivent.
Du coup pas d'initialisation dans les Start() / Awake() mais dans une fonction Init() que chaque script possède. Et j'appelle cette fonction depuis mes coroutines (ou depuis n'importe quel bout de code classique si pas besoin de coroutine) lorsque j'ai récupéré suffisamment d'informations pour initialiser l'objet en question.

Tu peux parfaitement suivre le même principe sans coroutine, donc en créant un script qui va initialiser ton jeu dans un ordre précis.
C'est d'autant plus vrai si tu instancies des GO. L'avantage avec cette solution, c'est que tu contrôles parfaitement à quel moment sont initialisés tes objets et donc tu évites clairement les soucis que tu cites.

Répondre

Revenir vers « Scripting »