Supposons que je veuille appeler certaines méthodes d'une voiture, par exemple drive (30, 5) , rotate (45) , stop () code>.
Comment puis-je avoir une file d'attente de méthodes, par exemple [drive (30,5), rotate (45), stop ()] pour que je puisse exécuter la première fonction, attendez qu'elle se termine et appelle le suivant?
Toutes ces méthodes sont des Coroutines ( IEnumerators ).
3 Réponses :
Oui, vous pouvez utiliser les actions et co-routines C #! Ce qui suit est tout pseudo-code mais peut être développé! Imaginez!
Using System;
public class SomeClass : MonoBehaviour
{
myDefaultWaitTime = SomeFloat;
myQueue = new List<Action>();
void AddAction(Action myNewAction)
{
myQueue.Add(myNewAction);
}
Action myNextAction()
{
Action myAction = myQueue[0];
myQueue.delete(0);
return myAction;
}
IEnumerator WaitToLoad(Action myAction)
{
float currentWaitTime = 0;
while (currentWaitTime < defaultWaitTime)
{
currentWaitTime += Time.deltaTime;
yield return new WaitForEndOfFrame();
}
StartCoroutine(myNextAction());
}
}
var ms = new List<Action>()
{
() => drive(30, 5),
() => rotate(45),
() => stop()
};
for (int i = 0; i < ms.Count; i++)
{
ms[i](); // Invoke
}
public IEnumerator Drive(int x, int y)
{
// driving routine here.
}
public IEnumerator Rotate(float angle)
{
// rotation routine here.
}
public IEnumerator Stop()
{
// Stop routine here
}
public IEnumerator ExecuteAll()
{
// Drive
yield return new StartCoroutine(Drive(30,5));
// rotate
yield return new StartCoroutine(Rotate(45));
// Stop
yield return new StartCoroutine(Stop());
// All actions are done.
}
public void StartAll()
{
StartCoroutine(ExecuteAll());
}
J'ai besoin d'une file d'attente, j'ai utilisé ces fonctions comme exemple mais cela peut être beaucoup plus, que j'aurais besoin d'ajouter au moment de l'exécution.