Unityは初めてです。私はコルーチンを学び、これを書いた。
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);
}
}
ボタンが押されるとコルーチンが呼び出され、「while」ループに入ります。ボタンを離れると、コルーチンが停止します。それは無限ループなので、「while」ループに引っかかってはいけませんか?どうして?
yield
、「Enumerable内の次の項目が要求されるまで呼び出し元に制御を渡す」のが効果的に短いことを理解するのに役立つ場合があります。
StopAllCoroutines()
この場合はお勧めしません。コルーチンを1つだけ使用している場合は問題ありませんが、複数のコルーチンを使用する予定がある場合、これは望ましくない影響を及ぼします。代わりにStopCoroutine()
、それらのすべてではなく、関連するものを使用して停止する必要があります。(StopAllCoroutines()
たとえば、レベルを終了するとき、または新しい領域をロードするときなどに便利ですが、「もう撃っていない」などの特定のことには役立ちません。)
"Fire1"
なく、キーの再マッピングを可能にするためにエンジンで設定できるものですKeycode.Foo
か?