Accédant en toute sécurité à l'API d'Unity à partir de threads non-Main
L'API d'Unity n'est pas un filetage; Appeler directement ses fonctions à partir d'un thread d'arrière-plan entraînera des erreurs. Cet article présente une solution robuste pour invoquer en toute sécurité les fonctions API Unity à partir d'autres threads.
Pourquoi les méthodes traditionnelles échouent:
Les approches simples comme l'utilisation des drapeaux booléennes pour la notification du fil principal sont intrinsèquement dangereuses et manquent de précision pour cibler des fonctions spécifiques. Les coroutines, bien que utiles pour de nombreuses tâches, ne conviennent pas aux opérations comme la gestion des douilles, conduisant souvent à des gels d'application.
Une solution de filetage:
Cette solution utilise une file d'attente de filetage pour gérer les actions destinées au thread principal. Cela garantit une exécution contrôlée et sûre des appels d'API Unity.
Implémentation (classe unitythread):
a UnityThread
La classe gère la file d'attente et l'exécution des actions sur le thread principal. Une instance statique garantit un accès facile tout au long de l'application.
Invoquer à partir des fils de fond:
La classe UnityThread
fournit des méthodes pour exécuter des actions dans différents cycles de mise à jour d'unité:
UnityThread.ExecuteInUpdate(Action action)
UnityThread.ExecuteInLateUpdate(Action action)
UnityThread.ExecuteInFixedUpdate(Action action)
UnityThread.ExecuteCoroutine(IEnumerator action)
Exemple d'utilisation:
UnityThread
: UnityThread.Initialize();
UnityThread.ExecuteInUpdate(() => { /* Your Unity API call here */ });
LateUpdate
et FixedUpdate
Exécution si ce n'est pas nécessaire. Avantages:
LateUpdate
et FixedUpdate
. Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!