SUIVEZ NOTRE DEVLOG SUR : STUDIO KRKR

En développant l’éditeur de niveau, je suis tombé sur une problématique dont la solution est en fait assez simple. En effet, utilisant les mêmes prefabs dans le jeu et l’éditeur, comment désactiver les scripts de ceux-ci lorsqu’ils sont instanciés dans l’éditeur pour qu’ils ne partent pas automatiquement dans tous les sens.
Une solution serait d’ajouter une fonction init() qui serait lancée dans le jeu sur chaque prefab…compliqué et fastidieux.
Je me suis demandé alors comment désactiver tous les composants de scripts sans désactiver les autres composants builtin d’Unity (Collider, Transform, Renderer…).
La solution est de mettre tous les composants d’un GameObject dans un tableau, de mettre leur type dans une chaine, et si la chaine ne contient pas “UnityEngine”, alors il s’agit d’un script. Il suffit ensuite de prendre le composant par son nom de type et de le forcer en Monobehaviour, ce qui permet d’accéder à la fonction enabled (qui n’existe pas sur Component).
Magique !

GameObject tileCreated;

MonoBehaviour _script;
string _type;

Component[] _components=tileCreated.GetComponents();

foreach (var _component in _components) {
_type=_component.GetType().ToString();
if (_type.IndexOf("UnityEngine")==-1) {
_script= tileCreated.GetComponent(_type) as MonoBehaviour;
_script.enabled=false;

}
}