(11)砲弾数が回復するアイテムの作成

1)砲弾回復アイテムを作る

今回は、アイテムを取ると決めた数だけ砲弾数が回復するような仕組みを作ります。

まずは、「砲弾回復アイテム」のオブジェクトをHierarchyで作成してみましょう。

*色、形、大きさは自由です。

・名前は「ShellItem」に変更します。(スペルに注意!Shellは「小文字のエルが2つ」。Itemは「大文字のアイ」)

スクリーンショット 2016-06-10 23.25.28
2)スクリプトの作成

回復アイテムの準備ができたら次はスクリプトです。

まずは「ShotShell」スクリプトを開きましょう。

そこに下記コードを追加してください。(★追加と書かれている部分です。)

(ポイント)メソッドに「アクセス修飾子」の「public」を付けること。これで、他のクラスからこのメソッドを呼び出せるようになります。

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class ShotShell : MonoBehaviour {

	public GameObject shellPrefab;
	public float shotSpeed;
	public AudioClip shotSound;
	public int shotCount;
	public Text shellLabel;

	void Start(){

		shellLabel.text = "砲弾:" + shotCount;
	}

	void Update () {

		if(Input.GetButtonDown("Fire1")){

			if(shotCount < 1)
				return;
			
			Shot();

			AudioSource.PlayClipAtPoint(shotSound, transform.position);

			shotCount -= 1;

			shellLabel.text = "砲弾:" + shotCount;
		}
	
	}

	public void Shot(){

		GameObject shell = Instantiate(shellPrefab, transform.position, Quaternion.identity) as GameObject;

		Rigidbody shellRigidbody = shell.GetComponent<Rigidbody>();

		shellRigidbody.AddForce(transform.forward * shotSpeed);

		Destroy(shell, 2.0f);
	}

	// ★追加
	// 砲弾数を増加させるメソッド(命令ブロック)
	public void AddShell(int amount){
		shotCount += amount;
		shellLabel.text = "砲弾:" + shotCount;
	}
}

次に「C#スクリプト」を新たに1つ作成してください。

名前は「ShellItem」にしておきます。

名前が変更できたらダブルクリックして開きましょう。

・下記のコードを記載してください。

using UnityEngine;
using System.Collections;

public class ShellItem : MonoBehaviour {

	// 「ShotShell」オブジェクトの情報を入れるための箱を作る。
	private GameObject shotShell;

	// 回復数の情報を入れるための箱を作る。
	public int reward;


	void OnTriggerEnter(Collider other){

		if(other.CompareTag("Player")){

			// 箱の中に「ShotShell」オブジェクトの情報を入れる。
			shotShell = GameObject.Find("ShotShell");

			// 「ShotShell」オブジェクトについている「ShotShell」スクリプトの情報を「ss」という名前の箱の中に入れる。
			ShotShell ss = shotShell.GetComponent<ShotShell>();

			// 「ShotShell」クラスの中にある「AddShell()」メソッドを呼び出す。
			ss.AddShell(reward);

			// アイテムを画面から削除する。
			Destroy(gameObject);

		}
	}
}

コードが書けたらいつものようにチェック。

チェックが完了したら、「ShellItem」スクリプトをドラッグ&ドロップで「ShellItem」オブジェクトに付けましょう。

「Reward」の空欄には「10」を入れます。(ここの数字が砲弾の回復数になります。)

スクリーンショット 2016-06-10 23.42.20

「Is Trigger」にチェックを入れるのを忘れないように!

スクリーンショット 2016-06-10 23.48.06


3)戦車(Player)を改良する。

「Player」(もしくは「Tank」)オブジェクトをクリック。

「Tag」「Player」を付けましょう。(「Player」タグはUnityが最初から用意しているので、自分で新しく作成する必要はありません。)

スクリーンショット 2016-05-23 15.29.01

・Player(Tank)に「Box Collider」コンポーネントを追加する。

「Box Collider」は、Player(Tank)全体をすっぽり囲むように「位置」と「大きさ」を調整しましょう。

スクリーンショット 2016-06-10 23.51.43

・ここまでできたら「再生ボタン」を押してみましょう。

回復アイテムをゲットした時、砲弾数が回復したら成功です。


4)効果音とエフェクトを付ける
(事前準備)

配布データの「KY_effects」をプロジェクトの「Assets」に追加。

*「KY_effects」はここからダウンロード →ダウンロードが完了したらダブルクリックして解凍する。

*解凍した素材データを「Assets」にドラッグ&ドロップする。(やり方はこちらを参照

このままでは味気ないのでアイテムをゲットした瞬間に「効果音」と「エフェクト」を出すようにしましょう。

「ShellItem」スクリプトにコードを追加していきます。

(復習)

①効果音が出るようにコードを追加

*効果音は自分の好きなものをインポートして使いましょう。

★追加の部分を書く。

using UnityEngine;
using System.Collections;

public class ShellItem : MonoBehaviour {

	private GameObject shotShell;
	public int reward;

	// ★追加
	public AudioClip shellItemGet;

	void OnTriggerEnter(Collider other){
		if(other.gameObject.CompareTag("Player")){

			shotShell = GameObject.Find("ShotShell");

			ShotShell ss = shotShell.GetComponent<ShotShell>();

			ss.AddShell(reward);

			Destroy(gameObject);

			// ★追加
			AudioSource.PlayClipAtPoint(shellItemGet, transform.position);
		}
	}
}

②エフェクト(パーティクル)が出るようにコードを追加

・ヒントは「Battle Tankのテキスト[7]」「エフェクト(視覚効果)を発生させるスクリプト」です。

これを参考にして「ShellItem」スクリプトの中にコードを追加しましょう。

*どんなエフェクト(パーティクル)を付けるかは自由です。(KY_effectsのPrefabsの中から好きなものを選んで設定しましょう。)

スクリーンショット 2016-06-11 0.06.12