j'ai un petit souci, que j'ai résolu, mais je pense que la solution que j'ai utilisée manque d'élégance.
J'ai une classe abstraite générique, qui regroupe des champs et des méthodes communes aux classes filles :
Code : Tout sélectionner
public abstract class ItemSOManager<T> : MonoBehaviour where T : ItemSO {}
De cette classe dérivent des classes de gestionnaires d'items : cheveux, barbes, masques, chapeaux, écharpes (et plus tard, armes, ...). Voici celle pour les cheveux :
Code : Tout sélectionner
public class HairManager : ItemSOManager<HairSO> { }
Le but de ce choix est d'éviter d'avoir à affecter à la main ces items. Quand le joueur choisit son personnage, il a accès à la possibilité de naviguer parmi les items possibles. Il peut choisir un HairSO pour les cheveux, mais pas un BeardSO. Par ailleurs, les différentes listes d'items se peuplent automatiquement depuis les assets.
Après avoir essayé plusieurs techniques, j'ai fini par attacher mes managers au personnage : HairManager, BeardManager, ... Pour l'instant il y a 6 managers, mais d'autres devraient arriver. Je souhaite me contenter d'attacher les nouveaux managers au personnage. Un script recherche ensuite les différents managers attachés pour en faire une liste :
Code : Tout sélectionner
itemSOManagersList = new List<ItemSOManager<ItemSO>> ();
itemSOManagersList = GetComponents<ItemSOManager<ItemSO>> ().ToList (); // ToList : LINQ
J'ai résolu mon problème en créant une interface vide :
Code : Tout sélectionner
public interface IManager {}
Code : Tout sélectionner
public class HairManager : ItemSOManager<Hair>, IManager{}
Code : Tout sélectionner
itemSOManagersList = GetComponents<IManager> ().ToList ();
Merci d'avoir tout lu et de prendre un peu de votre temps pour me donner des pistes.