2D連射

弾丸(Circle)を連射します。

空白キーで連射

  1. Shot では弾丸は一発だけでしたが、スペースキーで弾丸を連射します。
    Unity を起動して 2D 選択で Project を生成します。
    メニューから[Save Scene]を選び Main の名前で保存して下さい。
  2. メニューの Assets/Create/Sprites から Circle を選びます。
    プロジェクトパネル(Assets) からヒエラルキービューにドラッグすると図形が表示されます。
  3. [Projectタブ][Createタブ] から [C# Script] を選択して、NewBehaviourScript.cs を修正します。
    class 名はファイル名と同じにして下さい。
    C# Script をヒエラルキービューの Circle にアタッチして再生ボタンで図形が移動することを確認して下さい。
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class NewBehaviourScript : MonoBehaviour {
    
        void Update () {
            transform.Translate(new Vector2(0.1f, 0.05f));
        }
    }
    
  4. ヒエラルキービューの Circle をプロジェクトパネルに移動して元の画像を右クリックから削除します。
    プロジェクトパネル(Assets)に最初からある Circle は削除しないで下さい。
    (これを削除すると図形が描画されなくなる)
  5. [GameObject][Create Empty] から空のオブジェクトを作成して、名前を PlayerBullet に変更します。
    2D Shot ではヒエラルキービューの Circle に Script をアタッチしたのですが、今回は空のオブジェクトにアタッチして Circle を発射します。
  6. [Projectタブ][Createタブ] から[C# Script]を選択して名前を PlayerBullet.cs に変更します。
    class 名はファイル名(PlayerBullet.cs)に合わせて下さい。
    public GameObject Circle; には、次の項で説明するように PlayerBullet の Inspector から Circle を設定します。
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class PlayerBullet : MonoBehaviour {
        public GameObject Circle;
        void Update()
        {
            if (Input.GetButtonUp("Jump"))
            {
                Instantiate(Circle, transform.position, transform.rotation);
            }
        }
    }
    
  7. PlayerBullet.cs を PlayerBullet にアタッチして Inspector をクリックします。
    画面右 Player Bullet(Script) の Circle にヒエラルキービューから移動した Circle を設定します。

  8. 再生ボタンで実行すると、空白キーで弾丸(Circle)が連射されます。
    3Dの連射は 連射 を参照して下さい。
  9. このままでは弾丸が増え続けます。
    そこでウインドウの上限まで到達した弾丸を削除してみましょう。
    NewBehaviourScript.cs の Update() 関数を次のように修正して下さい。
    Y座標が 4.0 を超えた Object を削除します。
        void Update () {
            transform.Translate(new Vector2(0.1f, 0.05f));
            if (transform.position.y>4.0f)  Object.Destroy(gameObject);
        }
    

自動的に連射

  1. PlayerBullet.cs を次のように修正します。
    0.5f が発射の間隔で、連続して弾丸が発射されます。
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class PlayerBullet : MonoBehaviour {
        public GameObject Circle;
        IEnumerator Start()
        {
            while(true)
            {
                Instantiate(Circle, transform.position, transform.rotation);
                yield return new WaitForSeconds (0.5f);
            }
        }
    }
    

[Next Chapter ↓] Ship連射

[Previous Chapter ↑] Shot

前田稔の超初心者のプログラム入門
超初心者のプログラム入門(Unity)