Eu sou novo no Unity. Eu estava aprendendo corotinas e escrevi isso.
private void Fire()
{
if(Input.GetButtonDown("Fire1"))
{
StartCoroutine(FireContinuously());
}
if(Input.GetButtonUp("Fire1"))
{
StopAllCoroutines();
}
}
IEnumerator FireContinuously()
{
while(true)
{
GameObject laser = Instantiate(LaserPrefab, transform.position, Quaternion.identity) as GameObject;
laser.GetComponent<Rigidbody2D>().velocity = new Vector2(0, 10f);
yield return new WaitForSeconds(firetime);
}
}
Quando o botão é pressionado, a corotina é chamada e entra no loop 'while'. Quando deixo o botão, ele interrompe a corotina. Não deveria ficar preso no loop 'while', pois é um loop infinito? Por quê?
yield
útil perceber que é efetivamente a abreviação de "Rendimento do controle para o chamador até que o próximo item no Enumerável seja solicitado".
StopAllCoroutines()
neste caso. Tudo bem quando você está apenas usando uma corotina, mas se você planeja ter mais de uma, isso terá efeitos indesejados. Em vez disso, você deve usar StopCoroutine()
e parar o que é relevante em vez de todos eles. ( StopAllCoroutines()
Seria útil, por exemplo, quando terminar o nível ou o carregamento de uma nova área, etc., mas não para o material específico, como "Eu não estou disparando mais.")
"Fire1"
, é algo que você pode configurar no mecanismo para permitir remapeamentos importantes em vez de digitarKeycode.Foo
?