Est coroutine un nouveau thread dans Unity3D?

Je suis confus et curieux de savoir comment coroutines (dans Unity3D et peut-être d'autres endroits). Est coroutine un nouveau thread? L'unité de la documentation ils ont dit:

Une coroutine est une fonction qui permet de suspendre son exécution (le rendement) jusqu'à ce que le YieldInstruction finitions.

Et ils ont C# exemples ici:

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    void Start() {
        print("Starting " + Time.time);
        StartCoroutine(WaitAndPrint(2.0F));
        print("Before WaitAndPrint Finishes " + Time.time);
    }
    IEnumerator WaitAndPrint(float waitTime) {
        yield return new WaitForSeconds(waitTime);
        print("WaitAndPrint " + Time.time);
    }
}

J'ai beaucoup de questions à propos de cet exemple:

  1. Dans l'exemple ci-dessus, qui est la coroutine? Est WaitAndPrint() une coroutine? Est WaitForSeconds() une coroutine?

  2. Dans cette ligne: yield return new WaitForSeconds(waitTime);, pourquoi les deux yield et return sont présents? J'ai lu dans L'unité de documentation que "L'instruction rendement est un type spécial de retour, qui assure que la fonction va continuer à partir de la ligne après l'instruction rendement prochaine fois qu'il est appelé." Si yield est un spécial return, qu'est-ce que return fais ici?

  3. Pourquoi devons-nous retourner un IEnumerator?

  4. Ne StartCoroutine démarrer un nouveau thread?

  5. Combien de fois a WaitAndPrint() été appelé dans l'exemple ci-dessus? Ne yield return new WaitForSeconds(waitTime); vraiment de retour? Si oui, alors je suppose que WaitAndPrint() a été appelé à deux reprises dans le code ci-dessus. Et je suppose que StartCoroutine() appelait WaitAndPrint() plusieurs fois. Cependant, j'ai vu une autre Unité de la documentation qui dit: "L'exécution d'une coroutine peut être interrompue à tout moment à l'aide de l'instruction rendement. Le rendement de la valeur de retour indique quand la coroutine est la reprise." Ces mots me font sentir que WaitAndPrint() en réalité n'a pas retourné; il s'agissait simplement d'une pause; il a été en attente pour WaitForSeconds() de retour. Si c'est le cas, dans le code ci-dessus WaitAndPrint() a été appelé qu'une seule fois, et StartCoroutine était seulement responsable pour le démarrage de la fonction, non pas de l'appeler plusieurs fois.

En réponse à la question dans le titre, le coroutines NE PAS démarrer un nouveau thread et en eux-mêmes n'ont pas de connexion à fils. N'oubliez pas que Unity3D est fondamentalement cadre de base .. MonoBehaviours sont un cadre basé sur le concept. Coroutines - dans l'Unité - sont intrinsèquement liées à ce changement de paradigme. Les Threads sont totalement étranger.
Je tombe sur ce tuto unitygeek.com/coroutines-in-unity3d/,It explique très bien au sujet de l'utilisation de coroutines dans unity3d

OriginalL'auteur CherryQu | 2013-06-06