https://docs.unity3d.com/ScriptReference/CustomYieldInstruction.html
class WaitForMoves : CustomYieldInstruction {
private int movesLeft;
public WaitForMoves(int moves) {
movesLeft = moves;
Game.moveEvent.AddListener(OnMoveComplete);
}
void OnMoveComplete() {
movesLeft—-;
if (movesLeft <= 0)
Game.moveEvent.RemoveListener(OnMoveComplete);
}
public override bool keepWaiting {
get {
return movesLeft > 0;
}
}
}
And to use it, just as you wanted:
yield return new WaitForMoves(2);
If you have a global move counter in Game, then you wouldn’t need to have a listener at all:
class WaitForMoves : CustomYieldInstruction {
private int targetMoves;
public WaitForMoves(int moves) {
targetMoves = moves + Game.moveCounter;
}
public override bool keepWaiting {
get {
return Game.moveCounter < targetMoves;
}
}
}