Il y a quelque temps, j'ai commencé à travailler avec Unity et je suis toujours aux prises avec le problème des scripts étroitement couplés. Comment puis-je structurer mon code pour éviter ce problème?
Par exemple:
Je veux avoir des systèmes de santé et de mort dans des scripts séparés. Je veux également avoir différents scripts de marche interchangeables qui me permettent de changer la façon dont le personnage du joueur est déplacé (contrôles inertiels basés sur la physique comme dans Mario par rapport à des contrôles serrés et nerveux comme dans Super Meat Boy). Le script Santé doit contenir une référence au script Mort, afin qu'il puisse déclencher la méthode Die () lorsque la santé des joueurs atteint 0. Le script Mort doit contenir une référence au script de marche utilisé, pour désactiver la marche à mort (I suis fatigué des zombies).
Je créerais normalement des interfaces, comme IWalking
, IHealth
et IDeath
, de sorte que je puisse changer ces éléments à volonté sans casser le reste de mon code. Je voudrais les configurer par un script séparé sur l'objet joueur, par exemple PlayerScriptDependancyInjector
. Peut-être que ce script serait public IWalking
, IHealth
etIDeath
les attributs, de sorte que les dépendances peuvent être définies par le concepteur de niveau de l'inspecteur en faisant glisser et déposer des scripts appropriés.
Cela me permettrait d'ajouter simplement des comportements aux objets de jeu facilement et de ne pas me soucier des dépendances codées en dur.
Le problème dans Unity
Le problème est que dans Unity, je ne peux pas exposer les interfaces dans l'inspecteur, et si j'écris mes propres inspecteurs, les références ne seront pas sérialisées, et c'est beaucoup de travail inutile. C'est pourquoi il me reste à écrire du code étroitement couplé. Mon Death
script expose une référence à un InertiveWalking
script. Mais si je décide que je veux que le personnage du joueur contrôle étroitement, je ne peux pas simplement glisser-déposer le TightWalking
script, je dois changer le Death
script. Ça craint. Je peux y faire face, mais mon âme pleure chaque fois que je fais quelque chose comme ça.
Quelle est l'alternative préférée aux interfaces dans Unity? Comment résoudre ce problème? J'ai trouvé ça , mais ça me dit ce que je sais déjà, et ça ne me dit pas comment faire ça dans Unity! Cela aussi discute de ce qui doit être fait, pas comment, cela ne résout pas le problème du couplage étroit entre les scripts.
Dans l'ensemble, je pense que ceux-ci sont écrits pour les personnes qui sont arrivées à Unity avec une formation en conception de jeux qui apprennent juste à coder, et il y a très peu de ressources sur Unity pour les développeurs réguliers. Existe-t-il un moyen standard de structurer votre code dans Unity ou dois-je trouver ma propre méthode?
The problem is that in Unity I can't expose interfaces in the inspector
Je ne pense pas comprendre ce que vous entendez par "exposer l'interface dans l'inspecteur" parce que ma première pensée a été "pourquoi pas?"