『Unityでシューティングゲーム開発』砲弾を作って発射する

次に、戦車の砲弾を作ってそれを発射してみます。

1)砲弾オブジェクトを作る

・「Hierarchy」エリアで、「Create」→「3D Object」→「Sphere」をクリック。

スクリーンショット 2016-01-21 23.46.15

・名前は「Shell」(砲弾)に変更

・大きさは自由ですが、ここでは「0.3」に設定します。(*自分の戦車の大きさに合わせて変更してください。)

スクリーンショット 2016-01-21 23.49.41

・色は「Material」を使って自由に変更しましょう。

スクリーンショット 2016-01-21 23.50.52

「Add Component」「Rigidbody」を付けましょう。

スクリーンショット 2016-01-21 23.58.44

*「Rigidbody」「Use Gravity」のチェックを外してください。これでスピードがゆっくりでも砲弾がまっすぐ飛ぶようになります。

スクリーンショット 2016-07-08 15.43.02

2)砲弾をプレファブ化する

・まず、「Assets」内に「Prefabs」という名前のフォルダを作成。

・次に、「Prefabs」フォルダの中に、「Shell」をドラッグ&ドロップします。

スクリーンショット 2016-01-22 0.10.56

これで「Shell」プレファブが作成できました。

77e281b614ac40c410d0b69a57585efe

・「Hierarchy」にある「Shell」は使用しないので、右クリックで削除(Delete)しておきましょう。

スクリーンショット 2016-01-22 0.11.15

3)砲弾(Shell)を発射するスクリプトを作成する。

「C# Script」を1つ作成し、名前を「ShotShell」に変更します。

スクリーンショット 2016-01-22 0.25.37

・作成した「ShotShell」スクリプトをダブルクリックしてください。

・下記のコードを記載しましょう。

*横スクロールするとコードの全体を見ることができます。

using UnityEngine;
using System.Collections;

public class ShotShell : MonoBehaviour {

	// ここにデータを入れる箱(=変数)を書こう!
	public GameObject shellPrefab;
	public float shotSpeed;
	public AudioClip shotSound;


	// 命令ブロック(1)
	void Update () {
		
		// もしも「Fire1」というボタンが押されたら(条件)
		if(Input.GetButtonDown("Fire1")){

			// ①Shotという名前の命令ブロック(関数)を実行する。
			Shot();

			// ②効果音を再生する。
			AudioSource.PlayClipAtPoint(shotSound, transform.position);
		}
	}


	// 命令ブロック(2)
	public void Shot(){
		
		// プレファブから砲弾(Shell)オブジェクトを作成し、それをshellという名前の箱に入れる。
		GameObject shell =  (GameObject)Instantiate(shellPrefab, transform.position, Quaternion.identity);

		// Rigidbodyの情報を取得し、それをshellRigidbodyという名前の箱に入れる。
		Rigidbody shellRigidbody = shell.GetComponent<Rigidbody>();

		// shellRigidbodyに青軸(=z軸)方向の力を加える。
		shellRigidbody.AddForce(transform.forward * shotSpeed);

		// 生成したshellオブジェクトを2秒後に削除する。
		Destroy(shell, 2.0f);
	}
}

これでコードが完成しました。

次は、コードを付けるオブジェクトを作成します。

4)空のオブジェクトにコードを付ける!

・「Hierarchy」→「Create」→「 Create Empty」「空のオブジェクト」を作成

スクリーンショット 2016-01-22 14.30.46

・名前を「ShotShell」に変更

・「Position」と「Rotation」は全て「0」にしておきます。

スクリーンショット 2016-01-22 14.31.27

・この「ShotShell」オブジェクトに「ShotShell」スクリプトをドラッグ&ドロップ

スクリーンショット 2016-01-22 14.31.40

・「Shell Prefab」の空欄には「Shell」プレファブをドラッグ&ドロップ

スクリーンショット 2016-01-22 14.31.57

・「Shot Speed」は「1500」に設定(*好きな数字で構いません。実際に砲弾の飛び方を見て、調整しましょう。)

スクリーンショット 2016-01-22 14.32.07

・「cannon1」という音源データを「Shot Sound」にドラッグ&ドロップ

*事前に「Import New Assets」を使って「音源データ」をUnityの中に入れておきましょう。

スクリーンショット 2016-01-22 14.32.27

・これで設定完了です。

スクリーンショット 2016-01-22 14.32.40

5)「親子関係」を設定する

・「ShotShell」オブジェクトを「Tank」オブジェクトにドラッグ&ドロップします。

これで、「ShotShell」オブジェクトは「Tank」オブジェクトの「子供」になります。

*子供なることによって、親の「Player」が動くと、一緒に動くようになります。

スクリーンショット 2016-07-08 15.47.05

・戦車の砲身(玉の出るところ)に「ShotShell」が来るように位置を調整しましょう。

スクリーンショット 2016-07-08 15.47.31

さあここまでできたら準備完了です。

再生ボタンを押してみましょう。

「control」ボタンを押すたびに「砲弾が発射」されて、同時に「音」が出れば成功です。

スクリーンショット 2016-01-22 15.07.29

 


(サイト紹介)

『CodeGenius | Unity初心者のための学習サイト』