2016-01-26 12 views
5

Ho solo una piccola esperienza in Unity3D, ma ho notato che le classi che derivano da MonoBehaviour possono contenere funzioni con firme predefinite che verranno chiamate in un modo speciale. Ad esempio, se scrivo:In che modo Unity esegue i suoi metodi?

void Update() 
{ 
    //some code 
} 

questo metodo verrà chiamato ogni frame.

Immagino che all'interno di Unity ci sia una sorta di ciclo infinito che chiama il metodo Update ogni fotogramma per ogni oggetto sulla scena. Ma come fa a sapere che l'oggetto fornisce effettivamente l'implementazione del metodo Update? Sarebbe stato chiaro se Update fosse un override per un metodo nella classe MonoBehaviour, ma a giudicare dalla sintassi (e dal fatto che è possibile implementare tali metodi con qualsiasi modificatore di accesso) non lo è. C'è della magia della riflessione che accade lì?

+0

l'ansioso breve è che usano la magia di preelaborazione per gestire quelle "quasi-funzioni". puoi google molte spiegazioni. mai dimenticare i motori di gioco sono sistemi basati su frame, è tutto un po 'diverso! – Fattie

risposta

7

http://blogs.unity3d.com/2015/12/23/1k-update-calls/

No, Unità non utilizza System.Reflection di trovare un metodo magico ogni volta che ha bisogno di chiamare uno.

Invece, la prima volta una MonoBehaviour di un dato tipo si accede lo script sottostante è controllato tramite scripting runtime (sia mono o IL2CPP) se ha dei metodi magici definiti e questa informazione viene memorizzata nella cache . Se un MonoBehaviour ha un metodo specifico è aggiunto a un elenco appropriato, ad esempio se uno script ha il metodo Update definito viene aggiunto a un elenco di script che devono essere aggiornati su ogni fotogramma .

Durante il gioco, Unity scorre semplicemente attraverso questi elenchi ed esegue i metodi da esso - che semplice. Inoltre, questo è il motivo per cui non importa se il tuo metodo di aggiornamento è pubblico o privato, .

+0

Esattamente quello che volevo! Molte grazie! – bashis

+0

Sono felice di poterti aiutare. Saluti. A proposito di questo articolo del blog ha informazioni molto più interessanti. –

+0

Quindi, si scopre che in realtà * fanno * usano una sorta di riflesso, semplicemente non 'System.Reflection'. – bashis

Problemi correlati