Qualche tempo fa ho iniziato a lavorare con Unity e continuo a lottare con il problema degli script strettamente associati. Come posso strutturare il mio codice per evitare questo problema?
Per esempio:
Voglio avere sistemi di salute e morte in script separati. Voglio anche avere diversi script di camminata intercambiabili che mi permettano di cambiare il modo in cui viene mosso il personaggio del giocatore (basato sulla fisica, controlli inerziali come in Mario contro controlli stretti e contorti come in Super Meat Boy). Lo script Health deve contenere un riferimento allo script Death, in modo che possa innescare il metodo Die () quando la salute dei giocatori raggiunge lo 0. Lo script Death dovrebbe contenere alcuni riferimenti allo script walking utilizzato, per disabilitare il camminare sulla morte (I sono stanco di zombi).
Avrei normalmente creare interfacce, come IWalking
, IHealth
e IDeath
, in modo che posso cambiare questi elementi in un capriccio senza rompere il resto del mio codice. Vorrei che fossero impostati da uno script separato sull'oggetto giocatore, diciamo PlayerScriptDependancyInjector
. Forse che lo script avrebbe pubblici IWalking
, IHealth
e IDeath
gli attributi, in modo che le dipendenze possono essere impostati dal designer di livello dalla finestra di ispezione trascinando e rilasciando gli script appropriati.
Ciò mi consentirebbe semplicemente di aggiungere facilmente comportamenti agli oggetti di gioco e non preoccuparmi delle dipendenze codificate.
Il problema in Unity
Il problema è che in Unity non riesco a esporre interfacce nell'ispettore e, se scrivo i miei ispettori, i riferimenti non verranno serializzati ed è un sacco di lavoro inutile. Ecco perché sono rimasto con la scrittura di codice strettamente accoppiato. La mia Death
sceneggiatura espone un riferimento a una InertiveWalking
sceneggiatura. Ma se decido di voler controllare strettamente il personaggio del giocatore, non posso semplicemente trascinare e rilasciare la TightWalking
sceneggiatura, devo cambiarla Death
. Che schifo Posso affrontarlo, ma la mia anima piange ogni volta che faccio qualcosa del genere.
Qual è l'alternativa preferita alle interfacce in Unity? Come posso risolvere questo problema? Ho trovato questo , ma mi dice quello che già so, e non mi dice come farlo in Unity! Anche questo discute cosa dovrebbe essere fatto, non come, non affronta il problema dello stretto accoppiamento tra script.
Tutto sommato, penso che quelli siano scritti per le persone che sono venute su Unity con un background di game design che hanno appena imparato a programmare e su Unity ci sono pochissime risorse per gli sviluppatori regolari. Esiste un modo standard per strutturare il codice in Unity o devo capire il mio metodo?
The problem is that in Unity I can't expose interfaces in the inspector
Non credo di capire cosa intendi con "esporre l'interfaccia nell'ispettore" perché il mio primo pensiero è stato "perché no?"