読者です 読者をやめる 読者になる 読者になる

うさがにっき

読書感想文とプログラムのこと書いてきます

Unityでタッチしたらキャラが消えるゲームを作る

概要

これまで勉強した知識で、タッチしたらキャラが消えるゲームを作る

詳細

対象となる端末を設定する、File > Build Setting
f:id:tiro105:20140630161017p:plain

今回はAndroidにする
f:id:tiro105:20140630161030p:plain

対象となるディスプレイサイズを設定
f:id:tiro105:20140630161041p:plain

スプライトを配置
f:id:tiro105:20140630161055p:plain

スプライトに以下scriptを設定

public class Enemy : MonoBehaviour {

	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
	
	}

	void OnMouseDown() {
		Destroy (gameObject);
	}
}

このままだと、ユニティちゃんが一人しか登場しなくて寂しいのでprefabを使って増やす
Prefabを作成、GameManagerとなる空のゲームオブジェクトを作成し、GameManagerスクリプト、Prefabを設定

ゲームにタイムも表示してみる
GameObject > GUI Textを追加
f:id:tiro105:20140630161304p:plain

スクリプトに以下のコードを追加する

public class GameManager : MonoBehaviour {

	public GameObject enemyPrefab;
	public GUIText time;

するとインスペクタ上に新しいプロパティが追加されるので、ここに先ほど作成したGUI Textをドラッグドロップ

以下のコードを追記
Time.deltaTimeは前回のonUpdateからの経過時間を返してくれる

	// Update is called once per frame
	void Update () {
		float dateTime = Time.deltaTime;
		remainintTime -= dateTime;
		time.text = ("" + remainintTime);
	}

するとこんな感じで時間が表示される
f:id:tiro105:20140630161227p:plain

同じ要領でscoreも表示する

using UnityEngine;
using System.Collections;

public class GameManager : MonoBehaviour {

	public GameObject enemyPrefab;
	public GUIText time;
	public GUIText score;
	
	int myScore = 0;
	float remainintTime = 60.0f;
	
	// Use this for initialization
	void Start () {
		MakeEnemy ();
	}
	
	// Update is called once per frame
	void Update () {
		float dateTime = Time.deltaTime;
		remainintTime -= dateTime;
		time.text = ("" + remainintTime);
		
		score.text = ("score:" + myScore);
	}
	
	void MakeEnemy() {
		for (int i = 0; i < 10; i++) {
			GameObject enemy = (GameObject)Instantiate(enemyPrefab);
			Vector3 p = enemy.transform.position;
			p.x = Random.Range(-3, 3);
			p.y = Random.Range (-5, 5);
			enemy.transform.position = p;
		}
	}
	
	public void AddScore(int add) {
		if (remainintTime > 0) {
			myScore += add;
		}
	}
}

EnemyのOnDestroy契機でScoreを加算する

using UnityEngine;
using System.Collections;


public class Enemy : MonoBehaviour {

	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
	
	}

	void OnMouseDown() {
		Destroy(gameObject);
	}

	void OnDestroy() {
		GameObject go = GameObject.Find ("GameManager");
		if (go != null) {
			Debug.Log("ondestroy");
			GameManager gm = go.GetComponent(typeof(GameManager)) as GameManager;
			gm.AddScore(100);
		}
	}
}

f:id:tiro105:20140630161327p:plain

感想

テキストの位置が思った位置にならない…