try this, you simply give the WaitForKeyDown coroutine a list of keys to check, once it registers a key, it will exit the checking loop & terminate: using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class InputTester : MonoBehaviour { int choice = -1; // valid choices for this example are 0 and 1 void Start() { StartCoroutine(DoSomeLogic()); } IEnumerator DoSomeLogic() { print("Starting..."); print("Awaiting your choice - 0 or 1. :: "); yield return StartCoroutine(WaitForKeyDown(new KeyCode[] { KeyCode.Alpha0, KeyCode.Alpha1 })); print("Continuing..."); switch (choice) { // logic based on the choice } } IEnumerator WaitForKeyDown(KeyCode[] codes) { bool pressed = false; while (!pressed) { foreach (KeyCode k in codes) { if (Input.GetKey(k)) { pressed = true; SetChoiceTo(k); break; } } yield return null; //you might want to only do this check once per frame -> yield return new WaitForEndOfFrame(); } } private void SetChoiceTo(KeyCode keyCode) { switch (keyCode) { case (KeyCode.Alpha0): choice = 0; break; case (KeyCode.Alpha1): choice = 1; break; } print(choice); } }