Unity(C#)初心者・入門者向けチュートリアル ひよこのたまご

AndroidやiOS向けアプリを簡単に作れるゲーム開発環境Unity(ユニティ)の使い方を、チュートリアル方式で一緒に学びましょう!

【Unity8】敵倒してアイテムGet!FindGameObjectWithTag, Instantiate【横スクロールユニティちゃん11】

いつもひよこのたまごをご利用下さいましてありがとうございます!
おかげ様でチュートリアル数も10ゲーム目となりました!
チュートリアル一覧は
こちら からどうぞ!


スポンサーリンク

Unity5.1.0f3 Personal(2015年6月)

f:id:hiyotama:20150618122504p:plain


このコンテンツは、『ユニティちゃんライセンス』で提供されています

ユニティちゃんライセンス

前回の続きです〜

今回は敵キャラを倒した時に、前回作成した回復アイテムをランダムで落とすようにしていきます〜

【目標】敵キャラを倒した時にランダムでアイテムを落とさせる

①アイテムをPrefab化する

前回作成したItemオブジェクトはPrefab化してしまいます〜


f:id:hiyotama:20150618145824p:plain
ドラッグ&ドロップ!


Prefab化すると不都合なことが1つあります〜それは、ItemScriptでpublic変数で作成しておいたlifeScript変数を、Inspector上から指定できなくなる点です〜


f:id:hiyotama:20150618150326p:plain
Hpオブジェクトをドラッグ&ドロップしても設定できない・・・


Prefab化したら、スクリプトから取得するしかなさそうです〜というわけで、ItemScriptを加筆修正していきます〜

using UnityEngine;
using System.Collections;

public class ItemScript : MonoBehaviour {
	
	public int healPoint = 20;
//********** 開始 **********//
	//Prefab化するとInspectorから指定できないためprivate化
	private LifeScript lifeScript;
	
	void Start ()
	{
		//HPタグの付いているオブジェクトのLifeScriptを取得
		lifeScript = GameObject.FindGameObjectWithTag("HP").GetComponent<LifeScript>();
	}
//********** 終了 **********//
	
	void OnCollisionEnter2D (Collision2D col)
	{
		if (col.gameObject.tag == "UnityChan") {
			lifeScript.LifeUp(healPoint);
			Destroy(gameObject);
		}
	}
}

ItemScript.cs


public変数である必要はもうなくなったので、lifeScript変数はprivateに変更しておきます〜

Inspectorビューからドラッグ&ドロップで指定する以外の方法として、今回はFindGameObjectWithTagというメソッドを使用しています〜Itemオブジェクトが実体化した時に、Hierarchy上にある「HP」というタグの付いたオブジェクトを取得しています〜

その後はいつものようにGetComponentを行って、LifeScriptをItemScript上で使えるようにしています〜


というわけで、HPタグを作成して、HpオブジェクトのタグをHPに変更しましょう〜


f:id:hiyotama:20150618151113p:plain
HPタグに変更


②敵キャラが死んだ時にランダムでアイテムを生成する

あとは敵キャラを倒した時に、Instantiateでアイテムを生成すればいいだけです〜以下ソースです〜

using UnityEngine;
using System.Collections;

public class Enemy1Script : MonoBehaviour {
	
	Rigidbody2D rigidbody2D;
	public int speed = -3;
	public GameObject explosion;
	public GameObject item;
	public int attackPoint = 10;
//********** 開始 **********//
	private LifeScript lifeScript;
//********** 終了 **********//

	void Start () {
		rigidbody2D = GetComponent<Rigidbody2D>();
//********** 開始 **********//
		lifeScript = GameObject.FindGameObjectWithTag("HP").GetComponent<LifeScript>();
//********** 終了 **********//
	}
	
	void Update () {
		rigidbody2D.velocity = new Vector2 (speed, rigidbody2D.velocity.y);
	}
	
	void OnTriggerEnter2D (Collider2D col)
	{
		if (col.tag == "Bullet") {
			Destroy (gameObject);
			Instantiate (explosion, transform.position, transform.rotation);
//********** 開始 **********//
			//四分の一の確率で回復アイテムを落とす
			if (Random.Range (0, 4) == 0) {
				Instantiate (item, transform.position, transform.rotation);
//********** 終了 **********//
			}
		}
	}

	void OnCollisionEnter2D (Collision2D col)
	{
		if (col.gameObject.tag == "UnityChan") {
			lifeScript.LifeDown(attackPoint);
		}
	}
}

Enemy1Script.cs


ついでにEnemy1オブジェクトもPrefab化したいので、先ほどと同じようにLifeScriptをprivate変数にして、Startメソッドで取得するように変更しました〜


Random.Rangeで0〜3の間から1つ数字を選んで、それが0だった時にInstantiateを実行してItemを生成しています〜
int型でランダム範囲を指定した場合は一番最後の数字は除くため、0〜4でない点に注意して下さい〜


Prefabは、LifeScript等のスクリプトはInspector上で指定できませんが、Item等オブジェクトはInspector上から指定できるため、itemはpublic型、lifeScriptはprivate型となっています〜


f:id:hiyotama:20150618152725p:plain
GameObjectはInspector上で指定できる


それではEnemy1をPrefab化し、3体作ってみましょう〜


f:id:hiyotama:20150618153029p:plain
Enemy1 * 3


【結果】


f:id:hiyotama:20150618153102p:plain
敵を倒して・・・


f:id:hiyotama:20150618153121p:plain
アイテム出現!


色々なアイテムを作ってみると面白いと思います〜


今回はここまでです〜

ありがとうございました〜


【Unity開発8】ユニティちゃんを表示させる【横スクロールユニティちゃん1】

【Unity開発8】ユニティちゃんを歩かせる【横スクロールユニティちゃん2】

【Unity開発8】カメラにユニティちゃんを追いかけさせる【横スクロールユニティちゃん3】

【Unity開発8】ユニティちゃんをジャンプさせる【横スクロールユニティちゃん4】

【Unity開発8】ユニティちゃんバスターで攻撃する【ユニティちゃん横スクロール5】

【Unity開発8】走っている時やジャンプ中にも弾を撃つ【横スクロールユニティちゃん6】

【Unity開発8】弾を当てて敵を倒す【横スクロールユニティちゃん7】

【Unity開発8】uGUIでライフを作り、ダメージを実装する【横スクロールユニティちゃん8】

【Unity開発8】ダメージを食らった時、一定時間無敵状態にする【横スクロールユニティちゃん9】

【Unity開発8】アイテムを取得して体力回復する【横スクロールユニティちゃん10】

【Unity開発8】敵キャラを倒した時にアイテムを落とさせる【横スクロールユニティちゃん11】

【Unity開発8】Main Cameraに映るまで敵キャラを待機させておく【横スクロールユニティちゃん12】

【Unity開発8】タイトル・ステージ紹介・ゲームオーバー・ゲームクリアー画面を作る【横スクロールユニティちゃん13】

【Unity開発8】バーチャルパッドを付けてモバイル対応する【横スクロールユニティちゃん14】