Так как ты написал делать нельзя, будет накапливаться ошибка которая будет приводить к тому, что все касты реально будут дольше 10с (и чем ниже фпс, тем больше разница)
Надо как-то так:
Код
void Update() {
if (Input.GetKeyDown(KeyCode.E)) {
StartCoroutine(Cast(10f));
}
}
IEnumerator Cast(float time) {
var startTime = Time.time;
var endTime = startTime + time;
while (Time.time < endTime) {
if (!Input.GetKey(KeyCode.E)) {
Debug.Log("Игрок отпустил кнопку раньше времени");
yield break;
}
Debug.Log(string.Format("Progress: {0}", (Time.time - startTime) / time));
yield return null;
}
Debug.Log("Игрок продержал кнопку нужное время");
}