簡単な2Dシューティングゲーム作成の第3回目を進めていきます。今回は機体(プレイヤー)から弾が発射できるようにしていきます。
はじめに
前回の続きで第3回目です。第1回目は下記から。
簡単なおさらいと今回やる事
前回まで、簡単な画面を作成して、矢印ボタンを押して機体が動くようにしました。今回は、機体から弾が出るようにします。
ゲーム作成開始
では、さっそく作成していきます。
弾の作成
まずは仮となる弾を用意します。Imagesフォルダ内で右クリック。作成から「2D」→「スプライト」→「円」を選びます。

名前をBulletにしてヒエラルキーにドラッグアンドドロップ。このままだと大きいのでスケールを変更しておきます。

当然ですが、弾は何発も発射します。もちろん、同じ弾なのでこのようなものはプレハブ化しておきます。テンプレートみたいなものですね。ヒエラルキーからPrefabsフォルダ内にドラッグアンドドロップ。

スクリプトで弾を発射
次に、Scriptsフォルダ内で右クリック。作成から「C#スクリプト」を選択し、Bulletと言う名前で新しくファイルを作成します。

Bulletスクリプトの中身は下記のように変更します。縦方向に場所を移動しているだけです。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Bullet : MonoBehaviour { void Update() { transform.position += new Vector3(0, 4f * Time.deltaTime, 0); } }
このスクリプトをBulletにくっつけます。

試しに動かしてみると、弾が上に向かって動いていきます。これで弾の動きは一旦OKですね。
弾を複数作成する
次に「Attack」ボタンを押した時に弾が出るようにします。Scriptsフォルダ内に新たに「PlayerAttack」という名前でファイルを作成します。

PlayerAttackスクリプトの中身は下記のように変更します。Attackが呼ばれたときにオブジェクトを生成しています。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerAttack : MonoBehaviour { public GameObject prefabBullet; public void Attack() { Instantiate(prefabBullet); } }
このスクリプトをPlayerにくっつけます。Public変数は「Bulletプレハブ」を指定します。ヒエラルキーにあったBulletは不要なので消しておきます。

Attackボタンを押した時に呼ばれるように、Attackのクリック時のイベントに追加します。

これで一度実行してみます。ボタンを押すと弾が出ますが、機体がどこにいても真ん中の決まった場所から弾が出ます。
弾の出る位置を調整
次に、弾が出る位置を「機体の先端」に変更します。Player配下に「空のオブジェクトを作成」。

弾が出る位置なので名前は「BulletPoint」にでもしておきます。機体の前の方のいい感じの位置に調整します。

PlayerAttackスクリプトを下記のように変更します。オブジェクトの生成場所をパラメータで指定します。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerAttack : MonoBehaviour { public GameObject prefabBullet; public Transform bulletPoint; public void Attack() { Instantiate(prefabBullet, bulletPoint.position, bulletPoint.rotation); } }
新たに追加した変数にBulletPointを指定します。

これで試しに動かして機体から弾が出るような動きになればOK。次回はマトとなる敵を生成していきます。