Bonjour,
Savez-vous s'il existe un moyen "Générique" d'accéder au script de l'enfant d'un gameObject sans indiquer son type ?
Existe-t-il une variable générique dans laquelle je pourrais stocker le script en question ?
(pouvoir y mettre des scripts différents selon les cas et y accéder avec la même ligne de code pendant le jeu)
J'explique globalement là où je bloque :
Je cherche à créer un système d'items
Au début j'ai créé des SciptableObjects (Item) ainsi qu'une classe <Item> dans laquelle je renseigne le ScriptableObject désiré et que je met sur des préfabs
Au start, la classe item récupère les infos du ScriptableObject, notamment :
Nom : -
Modèle 3D : -
Modèle 2D : -
J'ai mis au point un système d'inventaire avec un dictionnaire dans lequel je range directement ces préfabs
Ce dictionnaire prend comme index le nom du slot, et contient le préfab (GameObject)
Je vais ensuite chercher les infos en faisant :
dictionnaire[nom du slot].GetComponent<Item>().nom si je veux récupérer le nom par exemple
Seulement maintenant que j'ai un peu avancé, il me faut ajouter des caractéristiques à mes items, et je ne vais pas ajouter un niveau d'amélioration à des Pierres ou de Rondins de bois
Afin de résoudre ce problème, j'ai fait un système d'héritage, d'une classe Equipement et une classe Ressource, qui ajouteraient des infos supplémentaires à mon item.
Le problème, vous avez du le deviner, c'est que je peux plus y accéder en faisant GetComponent<Item>, mais je dois ensuite récupérer le script de l'Equipement.
Les 2 options que j'ai trouvé sont :
1- Déclarer un script de type Equipement
Ça pose problème car je vais pas déclarer tous les héritages possibles dans la classe mère
2- Le mettre sur mon gameObject et aller le chercher avec une condition Si "Equipement" alors GetComponent<Equipement>()
Mais demain si j'ai 50 armes différentes ça sera plus possible
Voilà j'espère avoir été suffisamment clair, je vous remercie d'avancer pour l'aide que vous pourrez m'apporter
Bonne journée à vous
Accéder au script enfant depuis le script parent
Re: Accéder au script enfant depuis le script parent
Alors, en lisant seulement tes premières lignes, je dirai :
Cette instruction va te donner l'ensemble des objets, enfant ou non, portant un script dérivant de MonoBehaviour.
Mais en lisant le reste, je doute que cette réponse t'aide. Mais je retrouve un problème que j'ai eu et que j'ai résolu en faisant des ScriptableObject qui dérivaient d'une classe mère, ce qui permettaient d'avoir des items Ressource, avec nom, poids, prix, visuels, et des items Weapon avec les mêmes caractéristiques plus attaque, défense, damage, etc...
Code : Tout sélectionner
MonoBehaviour[] mono = FindObjectsOfType<MonoBehaviour> ();
Mais en lisant le reste, je doute que cette réponse t'aide. Mais je retrouve un problème que j'ai eu et que j'ai résolu en faisant des ScriptableObject qui dérivaient d'une classe mère, ce qui permettaient d'avoir des items Ressource, avec nom, poids, prix, visuels, et des items Weapon avec les mêmes caractéristiques plus attaque, défense, damage, etc...
Re: Accéder au script enfant depuis le script parent
Bonjour et merci pour ta réponse
Effectivement, FindObjectsOfType aurait été une bonne solution si il fonctionnait à l'envers, en fait il me faut accéder au script qui est sur l'objet, et non à l'objet qui contient le script ^^
Pour les scriptableobjects, tu veux dire que tu avais fait quelque chose du genre
Item : ScriptableObject
Equipment : Item
C'est vrai que j'avais pas pensé à ça, je vais essayer je te tiens au courant !
Effectivement, FindObjectsOfType aurait été une bonne solution si il fonctionnait à l'envers, en fait il me faut accéder au script qui est sur l'objet, et non à l'objet qui contient le script ^^
Pour les scriptableobjects, tu veux dire que tu avais fait quelque chose du genre
Item : ScriptableObject
Equipment : Item
C'est vrai que j'avais pas pensé à ça, je vais essayer je te tiens au courant !
Re: Accéder au script enfant depuis le script parent
Je ne comprends pas pourquoi tu veux accéder au script. Tu pourrais poster le code complet ?
Re: Accéder au script enfant depuis le script parent
Bon, ça marche!
J'ai créé des héritages de ScritableObjects, avec un type à chaque "étage"
Et j'ai ensuite fait des scripts qui regardent le type de chaque étage ajoutent des composants en fonction
Comme ça je renseigne le dernier enfant de mon ScriptableObject en modèle, et mon objet se crée tout seul avec les différents étages (Item, Equipement, Arme, Dague par exemple)
Ensuite je peux accéder à un variable stockée dans Dague en castant Item comme une Dague par exemple
Donc c'est parfait, merci beaucoup pour ton idée
J'ai créé des héritages de ScritableObjects, avec un type à chaque "étage"
Et j'ai ensuite fait des scripts qui regardent le type de chaque étage ajoutent des composants en fonction
Comme ça je renseigne le dernier enfant de mon ScriptableObject en modèle, et mon objet se crée tout seul avec les différents étages (Item, Equipement, Arme, Dague par exemple)
Ensuite je peux accéder à un variable stockée dans Dague en castant Item comme une Dague par exemple
Donc c'est parfait, merci beaucoup pour ton idée