弾幕のように、一気にたくさんのオブジェクトを発射できる仕組みを作ってみましょう。
クリックすれば、Cubeの少し前の位置から、3つのボールを同じタイミングで出現します。
Instantiateをループして生成し、繰り返しのたびに角度を変えています。
関連記事:
Instantiateでオブジェクトの角度を変える
指定の座標からn秒おきに発射
n秒おきに発射をくり返す
1秒おきにオブジェクトを3個生成する
弾が消えなければ次を撃てなくする
弾幕のように全方向へ発射するしくみ
Sphereのプレハブを用意
Sphereを作成します。
SphereMove.csを作成して、Sphereに追加します。
SphereMove.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class SphereMove : MonoBehaviour { void Update() { transform.Translate(new Vector3(0, 0, 10 * Time.deltaTime)); } } |
Sphereをプロジェクトビューにドラッグ&ドロップして、Prefab化します。
Sphereの元データは削除しておきます。
一気にたくさんのプレハブを生成
続いて、Cubeを作成します。
BallShot.csを作成し、Cubeに追加します。
BallShot.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BallShot : MonoBehaviour { [SerializeField] GameObject ball; private int angle; private Vector3 shotPoint; void Start() { angle = -60; shotPoint = new Vector3 (this.transform.position.x, this.transform.position.y, this.transform.position.z+1); } void Update() { if(Input.GetMouseButtonDown(0)) { for(int i=0; i<3; i++ ) { Instantiate(ball, shotPoint, Quaternion.Euler(0, angle, 0)); angle += 60; } } else if(Input.GetMouseButtonUp(0)) { angle = -60; } } } |
Ballのフィールドに、Sphereのプレハブデータを入れます。
ゲームプレイして、クリックしてみましょう。
3つのプレハブが同時に出現します。
関連記事:
Instantiateでオブジェクトの角度を変える
指定の座標からn秒おきに発射
n秒おきに発射をくり返す
1秒おきにオブジェクトを3個生成する
弾が消えなければ次を撃てなくする
弾幕のように全方向へ発射するしくみ