このブログはUnityの初心者向けに、Untiyの機能の使い方、基本のスクリプトファイルの使い方から応用までをご説明しています。中級以上の方に読んでいただきたい内容も随時更新していますので、お時間がある方、検索でここにアクセスされた方はぜひ立ち寄っていってください。
前回の記事では 「Coroutine(コルーチン)」を使用して繰り返し弾を撃ち続ける動きを作成しました。今回はこのコルーチンを応用し、4方向に弾を生成、さらに発射するオブジェクトを回転させることにより弾幕の生成を実現してみます。
下の動画は「ファイブボックス 一分間Unity講座 回転しながら4方向に弾幕を発射し続ける方法」 のショート動画です。ご興味がございましたら、こちらの動画もご参照ください。
1 前回までのプログラム
今回は前回作成したコルーチンを使った0.2秒ごとに弾を発射するプログラムを修正します。前回作成したコードは以下のものです。
[SerializeField] GameObject bulletPrefab; //Bulletのプレハブ
void Start()
{
StartCoroutine(ShotCoroutine()); //ShotCoroutineを呼び出す
}
IEnumerator ShotCoroutine()
{
while (true) //無限ループ
{
yield return new WaitForSeconds(0.2f); //0.2秒待機
//Playeの場所に弾を生成し bullet という名前で変数化
GameObject bullet =
Instantiate(bulletPrefab, transform.position, Quaternion.identity);
//bulletからRigidbodyコンポーネントを取得し、上向きの力を加える
bullet.GetComponent<Rigidbody2D>().AddForce(transform.up *200);
Destroy(bullet, 2.0f); //bullet を2秒後に削除
}
}
[SerializeField]を指定して変数で宣言した bulletPrefab にはInspectorからRigidbody2Dコンポーネントを付与した Bullet のプレハブをAssignしておきます。
2 4方向に弾を発射
複数の方向に弾を発射するには for()文 を使います。
作成済みの ShotCoroutine() を以下の3か所を修正します。
くり返し
無限ループの内部で、for()文を使って1ターンで4発のBulletを生成
生成する弾の向き
Instantiate()関数の3つ目の引数は生成するオブジェクトの向きです。
Quaternion.Euler()メソッドを使って、Z軸を現在の向きにループ変数:i*90 度を足した角度に指定。4つの Bullet は90度ずつ変化した状態で生成されます
発射する弾の方向 もともとPlayerの向きに対し上向きの力を加えていたものを、生成された Bullet の向きに対し上向きの力を加えます
IEnumerator ShotCoroutine()
{
while (true) //無限ループ
{
yield return new WaitForSeconds(0.2f); //0.2秒待機
for(int i = 0; i < 4; i++) //4回繰り返す
{
//Playeの場所に弾を生成し変数化、向きを90度ずつ変更
GameObject bullet =
Instantiate(bulletPrefab, transform.position,
Quaternion.Euler(0,0,transform.eulerAngles.z+i*90));
//bulletからRigidbodyコンポーネントを取得、弾の上向きの力を加える
bullet.GetComponent<Rigidbody2D>().AddForce(bullet.transform.up * 200);
Destroy(bullet, 2.0f); //bullet を2秒後に削除
}
}
}
これで下の図のように、上下左右に弾が飛ぶようになります。
さらに発射するプレイヤーを回すことで、簡単な弾幕を作ることができます。
デバイス間の動きに違いが発生しないように FixedUpdate()関数を使用します。
void FixedUpdate()
{
transform.Rotate(0, 0, 2.0f); //2度ずつ回転
}
弾は直線状に移動しますが、Playerを回転させることで単純な動きの弾幕ができました。
弾やPlayerの動きに変化を与えることで、バリエーションにとんだ弾幕を作ることができます。
ファイブボックスでは、スクラッチやUnityの個別指導のオンラインレッスンを行っています。
Comments