Unity5.1.0f3 Personal(2015年6月)
今回は敵キャラを倒した時に、前回作成した回復アイテムをランダムで落とすようにしていきます〜
【目標】敵キャラを倒した時にランダムでアイテムを落とさせる
①アイテムをPrefab化する
前回作成したItemオブジェクトはPrefab化してしまいます〜
ドラッグ&ドロップ!
Prefab化すると不都合なことが1つあります〜それは、ItemScriptでpublic変数で作成しておいたlifeScript変数を、Inspector上から指定できなくなる点です〜
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に変更しましょう〜
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型となっています〜
GameObjectはInspector上で指定できる
それではEnemy1をPrefab化し、3体作ってみましょう〜
Enemy1 * 3
【結果】
敵を倒して・・・
アイテム出現!
色々なアイテムを作ってみると面白いと思います〜
今回はここまでです〜
ありがとうございました〜
【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】