[19]コインの残り枚数を表示する方法

今回は、コインの残り枚数を画面に表示する方法を学びます。UIを使って「コインのアイコン画像」を表示し、コインを取得したらアイコンが1つずつ減っていくことを表現します。

*今回の作業は「Mian」シーンで行いますので、それ以外のシーンになっている場合には「Main」をダブルクリックしてシーンを切り替えておきましょう。

・まずは「Canvas」を設置します。「Hierarchy」→「Create」→「UI」→「Canvas」で新たにオブジェクトを1つ作成してください。

スクリーンショット 2015-11-27 16.25.43

このCanvasの上に、「コインのアイコン画像」を設置していきます。

「Canvas」を選択して右クリック→「UI」を選択→「Image」を選択してクリック

スクリーンショット 2015-11-27 23.20.02

・名前を「CoinIcon」に変更する。

スクリーンショット 2015-11-27 23.25.28

・次に、「コインのイメージ画像」を「Import New Asset…」を使ってUnityの中に取り込みましょう。

(ここがポイント!)

取り込んだ画像はそのままではUIでは使えません。UIで使う場合にはTexture Typeを「Sprite(2D and UI)」に変更すると覚えておきましょう。

スクリーンショット 2015-11-27 23.31.21

・Texture Typeの変更が済んだら、CoinIconの「Source Image」にドラッグ&ドロップします。

スクリーンショット 2015-11-27 23.36.43

これでコイン画像が1つ表示されました。

・コイン画像の大きさは「Width」「Height」で自由に調整しましょう。

スクリーンショット 2015-11-28 0.10.24

次はコイン画像を「複製」します。

・「CoinIcon」を選択して右クリック→「Duplicate」を選択してクリック。今回はとりあえず「3個」作りましょう。

スクリーンショット 2015-11-27 23.45.47

・作成したコインの画像は右上に並べて配置します。

スクリーンショット 2015-11-28 0.15.16

次に、3つのコイン画像を「まとめて管理」できるようにします。

・「Canvas」を選択して右クリック→「UI」を選択→「Panel」を選択してクリック

スクリーンショット 2015-11-28 0.18.58

・作成した「Panel」の名前は「CoinPanel」に変更します。

スクリーンショット 2015-11-28 0.19.21

・「CoinPanel」の「大きさ」と「位置」をコイン画像がちょうど3つ入るように調整しましょう。

スクリーンショット 2015-11-28 0.28.32

・「CoinPanel」を選択した状態で「Image」のチェックを外しましょう。

するとCoinPanelは透明な状態になります。

スクリーンショット 2015-11-28 0.33.52

ここまでできたら、「3つのコイン画像(= CoinIcon)」をドラッグして「CoinPanel」の中にいれましょう。

スクリーンショット 2015-11-28 0.39.01

これで、CoinIconは「CoinPanelの子供」になり、まとめて管理ができるようになりました。

スクリーンショット 2015-11-28 0.43.08

次にスクリプトを作成します。

・「C# Script」を1つ作成しましょう。名前は「CoinPanel」に変更します。

スクリーンショット 2015-11-28 13.50.25

スクリプトが作成できたらダブルクリック。

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

using UnityEngine;
using System.Collections;

public class CoinPanel : MonoBehaviour {

	// ①★配列の箱を作る(配列は複数のデータを入れることができる箱)
	public GameObject[] icons;

	// ②★このメソッド(命令ブロック)を記載する
	// コインの残り枚数に応じてコインの画像を出し分ける。
	public void UpdateCoin(int coin){

		for(int i = 0; i < icons.Length; i++){
			if(coin <= i){
				icons[i].SetActive(true);
			} else {
				icons[i].SetActive(false);
			}
		}
	}
}

・作成したスクリプトを「CoinPanel」オブジェクトにドラッグ&ドロップする。

スクリーンショット 2015-11-28 15.37.51

・Inspectorで「Size」「3」にしてエンターを押す。

そうすると、「Element0」「Element1」「Element2」が出現します。

スクリーンショット 2015-11-28 15.41.07

「Element0」「Element1」「Element2」に「CoinIcon」「CoinIcon(1)」「CoinIcon(2)」を1ずつずつ入れていく。

スクリーンショット 2015-11-28 15.41.28

・下記のようになればOKです。

スクリーンショット 2015-11-28 15.41.40

★ここで以前作成した「Ball」スクリプトをダブルクリックして開きましょう。

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

using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;

public class Ball : MonoBehaviour {

	public float move_speed;
	private Rigidbody rb;
	public AudioClip coinGet;
	public float jump_speed;
	private bool isJumping = false;
	private int count;


	// Use this for initialization
	void Start () {

		rb = GetComponent<Rigidbody>();

		count = 0;
	}

	// ★★このメソッド(命令ブロック)を記載する
	// コイン取得用の関数
	public int Coin(){
		return count;
	}
	// ここまで

	
	// Update is called once per frame
	void Update () {

		float moveHorizontal = Input.GetAxis("Horizontal");
		float moveVertical = Input.GetAxis("Vertical");

		Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
		rb.AddForce(movement * move_speed);

		if(Input.GetButtonDown("Jump") && isJumping == false){
			rb.velocity = Vector3.up * jump_speed;
			isJumping = true;
		}
	}
		
	void OnCollisionEnter(Collision col){
		if(col.gameObject.CompareTag("Floor")){
			isJumping = false;
		}
	}


	void OnTriggerEnter(Collider other){

		if(other.CompareTag("Coin")){
			Destroy(other.gameObject);

			AudioSource.PlayClipAtPoint(coinGet, transform.position);

			count = count + 1;

			if(count == 2){
				Invoke("ReturnToFile", 0.5f);
			}
		}
	}
		
	void ReturnToFile(){
		SceneManager.LoadScene("GameClear");
	}
}

次にゲーム全体を管理するスクリプトを作成します。

・「C# Script」を1つ作成して、名前を「GameController」に変更してください。

スクリーンショット 2015-11-28 15.42.26

スクリプトが作成できたらダブルクリック。

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

using UnityEngine;
using System.Collections;

public class GameController : MonoBehaviour {

	// ★変数を定義する
	public Ball coinCount;
	public CoinPanel coinPanel;

	
	// Update is called once per frame
	void Update () {

		// ★コインパネルを更新する。
		coinPanel.UpdateCoin(coinCount.Coin());
	
	}
}

スクリプト(台本)が作成できたら、今度はこのスクリプトをドラッグ&ドロップするオブジェクトを作成します。

・「Hierarchy」→「Create」→「Create Empty」をクリック

これは文字通り、「Empty=空っぽ」のオブジェクトで、Inspector上には「Transform=位置の情報」しかありません。

スクリーンショット 2015-11-28 15.49.06

・「Create Empty」を作成したら、名前を「GameController」に変更する。

スクリーンショット 2015-11-28 15.49.20

・「GameControllerスクリプト」を「GameControllerオブジェクト」にドラッグ&ドロップする。

スクリーンショット 2015-11-28 15.49.35

(ここがポイント!)

・「Coincount」の右空欄部分に「Ball」オブジェクトをドラッグ&ドロップする。

スクリーンショット 2015-11-28 15.52.03

・「Coin Panel」の右空欄部分に「CoinPanel」オブジェクトをドラッグ&ドロップする。

スクリーンショット 2015-11-28 15.52.15

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

コインを取得するごとにコインのアイコンが消えれば成功です。

スクリーンショット 2015-11-28 23.30.51