Sök…


Inga åsidosatta metoder

Anledningen till att du inte behöver åsidosätta Awake , Start , Update och annan metod beror på att de inte är virtuella metoder som definieras i en basklass.

Första gången du får åtkomst till ditt skript tittar skriptkörningstiden igenom skriptet för att se om vissa metoder är definierade. Om de är det cachas informationen och metoderna läggs till i deras respektive lista. Dessa listor slingras sedan helt enkelt vid olika tidpunkter.

Anledningen till att dessa metoder inte är virtuella är på grund av prestanda. Om alla skript skulle ha Awake , Start , OnEnable , OnDisable , Update , LateUpdate och FixedUpdate , skulle dessa alla läggas till i sina listor, vilket skulle innebära att alla dessa metoder körs. Normalt skulle detta inte vara ett stort problem, men alla dessa metodsamtal är från den ursprungliga sidan (C ++) till den hanterade sidan (C #) som kommer med en prestandakostnad.

Föreställ dig nu detta, alla dessa metoder finns i deras listor och vissa / de flesta av dem kanske inte ens har en faktisk metodkropp. Detta skulle betyda att det finns en enorm mängd prestanda som slösas bort med samtalsmetoder som inte ens gör någonting. För att förhindra detta valde Unity bort att använda virtuella metoder och skapade ett meddelandesystem som ser till att dessa metoder bara ringas när de faktiskt definieras, vilket sparar onödiga metodsamtal.

Du kan läsa mer om ärendet på en Unity-blogg här: 10000 Update () Samtal och mer om IL2CPP här: En introduktion till IL2CPP Internals



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow