ミサイルやボールを発射する際、何発もPrefab生成されては困るケースもあります。
今回は、1秒間に1発しか撃てないように、ボール発射を制限してみます。
関連記事:
n秒おきに発射をくり返す
キーを長押しでn秒おきに発射
360°全方位に向けて発射
指定の座標からn秒おきに発射
マウス長押しでn秒おきにミサイル連射
Prefabデータの用意
まずはボールのPrefabを作成します。
Sphereオブジェクトを作成し、色をつけました。
Sphereをプレハブ化します。
Sphereの元データは削除しておきましょう。
連射させないスクリプト
続いて、連射防止のスクリプトを作ります。
まずは、空のオブジェクトを作成しましょう。
GameObjectという名前で空のオブジェクトが出来ています。
ここに、BallShot.csを作成して追加しましょう。
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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BallShot : MonoBehaviour { public GameObject ball; private float time; //時間計測のための変数 private Vector3 mousePosition; void Start () { time = 1.0f; //最初の1回をOK } void Update () { time +=Time.deltaTime; //時間を増やす if(time >= 1.0f) //1秒以上経てばOK { if (Input.GetMouseButtonDown(0)) { mousePosition = Input.mousePosition; mousePosition.z = 10.0f; Instantiate(ball, Camera.main.ScreenToWorldPoint(mousePosition),Quaternion.identity); time = 0.0f; //時間を初期化 } } } } |
Ballのフィールドができるので、ここにSphereを入れましょう。
続いて、ボールに動きをつけるためのスクリプトを作成します。
Sphereのプレハブに、SphereMove.csを作成して追加しましょう。
リジッドボディを追加します。
SphereMove.csを書きましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class SphereMove : MonoBehaviour { public float force = 1.0f; public Rigidbody rb; void Update() { rb = GetComponent<Rigidbody>(); rb.AddForce(0, 0, force, ForceMode.Impulse); } } |
ゲームプレイして、動作を確認します。
いくらクリックを連打しても、次のボールが発射されません。
関連記事:
n秒おきに発射をくり返す
キーを長押しでn秒おきに発射
360°全方位に向けて発射
指定の座標からn秒おきに発射
マウス長押しでn秒おきにミサイル連射