第03回



第03回 プレイヤーから弾を撃つ

プロジェクトの準備

  1. このページは 2Dシューティングゲーム を初心者用に簡略化したものです。
    ダウンロードした「第02回プロジェクト」から Assets/Scenes/Stage.unity をダブルクリックして起動して下さい。
    本来なら Player が矢印キー(←→↑↓)で操作できるはずなのですがエラーになります。
    主な原因は <Rigidbody2D> でしょうか。 (^_^;)
  2. Assets/Script/Player.cs を修正します。
    Player.cs は Player にアタッチして、矢印キーで Player を操作するために使われます。
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Player : MonoBehaviour
    {   public float speed = 5;
    
        void Update ()
        {   float x = Input.GetAxisRaw ("Horizontal");
            float y = Input.GetAxisRaw ("Vertical");
            Vector2 direction = new Vector2 (x, y).normalized;
            GetComponent<Rigidbody2D>().velocity = direction * speed;
        }
    }
    
  3. 修正すると、画面下の赤いエラーメッセージが消えます。(消えない場合もある)
    再生ボタン(画面上部の右三角)をクリックして、矢印キー(←→↑↓)の操作で Player が移動することを確認して下さい。
  4. メニューから File→Save Scene で保存して一度プロジェクトを閉じて下さい。
    ウインドウエクスプローラーでプロジェクトのフォルダーをコピーしてバックアップを取りましょう。
    長い作業が続くときは、要所要所でバックアップするのが賢明です。

弾を設定

  1. プロジェクトフォルダーに格納されている Assets/Scenes/Stage のダブルクリックで起動します。
    Assets/Sprite/Bullet/Bullet_0 をシーンパネルにドラッグして Bullet に変更します。
    Bullet の Inspector から Add Component ボタンをクリックして Physics 2D→Rigidbody 2D を追加します。
    Rigidbody 2D の Gravity Scale を 0 に設定して下さい。
    Rigidbody 2D は Rigidbody の2D版で物理的挙動を行うクラスです。
    Rigidbody2D の基本は Rigidbody を参照して下さい。
  2. Assets/Scripts を選択して [Projectタブ][Createタブ] から [C# Script] を選択して、Bullet.cs を作成します。
    class 名前(Bullet)は、ファイル名と一致しなければなりません。
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Bullet : MonoBehaviour
    {   public int speed = 7;
    
        void Start ()
        {   GetComponent<Rigidbody2D>().velocity = transform.up.normalized * speed;
        }
    }
    
  3. Bullet.cs をヒエラルキービューの Bullet にアタッチして再生ボタンで Bullet(弾)が上に発射されることを確認して下さい。
    (アタッチがうまく行かないときは Unity Project を参照して下さい)
  4. Bullet を Assets/Prefabs にドラッグして、ヒエラルキービューの Bullet を右クリックから削除して下さい。
    メニューの File→Save Scene で一度保存して下さい。

Player から弾を発射

  1. 弾丸の連射は 2D連射 に掲載しています。
    メニューの [GameObject][Create Empty] から空のオブジェクトを作成して、名前を PlayerBullet に変更します。
  2. Assets/Scripts を選択して [Projectタブ][Createタブ] から [C# Script] を選択して、PlayerBullet.cs を作成します。
    弾を連射するスクリプトです。transform.position が発射する座標で、transform.rotation が発射角度です。
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class PlayerBullet : MonoBehaviour
    {
        public GameObject bullet;
    
        IEnumerator Start ()
        {   while (true) {
                // 弾をプレイヤーと同じ位置/角度で作成
                Instantiate (bullet, transform.position, transform.rotation);
                // 0.1秒待つ
                yield return new WaitForSeconds (0.1f);
            }
        }
    }
    
  3. PlayerBullet.cs を PlayerBullet にアタッチします。
    public GameObject bullet; の宣言すると、インスペクターに Bullet が追加されます。
    追加された Bullet に Assets/Prefabs/bullet をドラッグして設定します。
  4. ヒエラルキービューに Player が表示されていないときは Assets/Prefabs/Player からドラッグして下さい。
    Player の下位に PlayerBullet を移動して親子関係に設定します。
    ゲームを再生すると Player から弾が連射されるようになります。
    矢印キー(←→↑↓)の操作で Player が移動することも確認して下さい。
    Player の Inspector から Prefab/Apply タブ(Inspector の右上)をクリックして下さい。
    Prefabs の Object を修正したときは Apply タブをクリックして更新して下さい。
  1. 今回のプロジェクトはかなり解り難いので、仕様を少し変更して簡単になるように工夫しています。
    第03回では PlayerBullet に二個の弾を設定して PlayerBullet を発射していますが、弾は一個にしました。
    それに伴い、弾の画像(Bullet_0)に直接 Rigidbody 2D を組み込んで、PlayerBullet では無く Bullet を発射します。
  2. PlayerBullet は Bullet の弾を連射するために使用しています。
    2Dシューティングは シップから弾を連射 も参考にして下さい。
  3. Player と Bullet の上下関係を設定します。
    2Dシューティングゲームではソーティングレイヤーを使っていますが、Player の Inspector から Order in Layer を 1 にする方法が簡単です。
  4. Ship が小さいときは、ヒエラルキービューの Main Camera を選択して、Inspector から Projection を Orthographic に、Size を 3 程度に設定して下さい。
  5. 省略したプログラムの詳細は 2Dシューティングゲーム から 「第03回 プレイヤーから弾を撃つ」を参照して下さい。
    第03回 の完成したプロジェクトは、後部の「今回のプロジェクトファイルをダウンロード」からダウンロードすることが出来ます。

[Next Chapter ↓] Shooting-04
[Previous Chapter ↑] Shooting-02

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