web-dev-qa-db-fra.com

Pourquoi choisir UnityEvent plutôt que les événements C # natifs?

Je veux dire, les événements UnityEvents sont plus lents que les événements natifs C # et ils stockent toujours une référence forte aux récepteurs. Ainsi, la seule raison valable que je peux trouver pour utiliser UnityEvents sur des événements C # natifs est leur intégration avec l'éditeur. Suis-je en train d'oublier quelque chose?

16

Suis-je en train d'oublier quelque chose?

Non, vous ne négligez rien. Le seul avantage et la raison d'utiliser UnityEvent est qu'il vous permet d'utiliser des événements dans l'éditeur. C'est pour faire glisser et déposer des gens ou ceux qui font des plugins Editor.

Un autre avantage de UnityEvent est qu'il empêche que le problème lié à Unity Object ne soit libéré en raison d'une mauvaise utilisation des délégués ou de l'utilisation de délégués anonymes avec Unity Objects. Bien qu'ils soient libérés lorsque le script principal qui les contient est détruit. La raison en est que UnityEvent est implémenté avec des références faibles, supprimant/minimisant ainsi ce problème. Ces deux choses ne valent toujours pas l'utilisation de UnityEvent sur les événements C # natifs.

Vous devez toujours utiliser l'événement natif et déléguer sur UnityEvent si vous ne créez pas de plugin Editor en raison de ses performances rapides et de sa faible utilisation de mémoire. Voir this et this post post pour plus d'informations.

30
Programmer

UnityEvent est principalement utilisé avec le système Unity UI, car ugui doit sérialiser la configuration des rappels dans le système ui, comme le rappel OnClick du bouton.

La sérialisation est une caractéristique la plus importante du moteur de jeu d'unité, avec le système d'événements intégré c #, vous ne pouvez pas faire de sérialisation.

Donc, si vous travaillez avec le système UI de l'unité, vous devez utiliser l'UnityEvent, si vous souhaitez sérialiser la configuration de la fonction de rappel, vous devez utiliser l'UnityEvent.

Dans d'autres situations, utilisez simplement l'événement intégré c #.

0
liyonghelpme