web-dev-qa-db-fra.com

Comment exécuter une tâche asynchrone dans Unity3D?

Est-ce que n'importe quel corps sait comment faire une tâche asynchrone dans l'unité? Je suis à la recherche de cela pendant un moment, mais je n'ai pas encore trouvé le moyen de le faire. J'essaie de faire un jeu de coloriage, il existe un algorithme de remplissage qui prend un peu de temps à traiter .. Merci pour toute aide.

14
makkuzu

Vous pouvez utiliser des threads dans Unity pour exécuter vos tâches asynchrones. Généralement, vous exécutez des threads détachés (à partir de l'interface utilisateur Unity) pour exécuter des processus longs et vérifier les résultats (vous ne pouvez pas interagir avec Unity à partir du thread de travail) . L'approche courante consiste à utiliser une classe qui représente un travail de thread. qui sera initialisé par le fil principal de Unity. Ensuite, vous démarrez un thread de travail sur une fonction de cette classe et le laissez faire son travail (les Coroutines sont exécutées sur le thread principal de Unity et ne sont donc pas de vrais threads. Le meilleur article sur Coroutines est ici )

Voici un exemple de l'approche décrite ci-dessus (voir réponse acceptée):

http://answers.unity3d.com/questions/357033/unity3d-and-c-coroutines-vs-threading.html

Vous pouvez également essayer un package UnityGems qui produit le même effet mais offre une certaine commodité (telle que la prise en charge de la fermeture):

http://unitygems.com/threads/

HTH . Meilleur!

10
German

Vous pouvez simplement utiliser les threads C # pour que votre travail asynchrone fonctionne. Vous pouvez en savoir plus sur les discussions sur ici .

Vous devez noter que vous ne pouvez pas interagir avec Unity à partir du thread de travail. Par conséquent, une fois le travail terminé, vous devez utiliser les résultats à partir du thread Unity. Vous pouvez le faire en définissant simplement un indicateur sur MonoBehaviour qui effectuera la mise à jour et vérifiera cet indicateur dans la méthode Update. Quelque chose de semblable à ceci:

void Update()
{
  if( _workDone )
  {
   ...display it
  }
}
5
Radu Diță

Vous pouvez désormais utiliser directement async wait avec Task in Unity 2017. Plus de détails ici

3
Steve Vermeulen

utilisez un CoRoutine que vous pouvez configurer, puis exécutez une petite partie de chaque image pour découper votre code en tranches temporelles . co-routines

1
CthulhuJon

Je sais que cette question est ancienne, mais elle reste tout à fait pertinente. J'ai codé ma propre solution dans mon framework open source. Si vous êtes intéressé, vous pouvez trouver toutes les infos ici:

http://www.sebaslab.com/svelto-taskrunner-run-serial-and-parallel-asynchronous-tasks-in-unity3d/

Il prend également en charge le multithreading.

0
sebas