Unity5.1.0f3 Personal(2015年6月)
今回は、敵キャラをステージに待機させておいて、Main Cameraに移った時に動かす処理を追加していきます〜
【目標】敵キャラがMain Cameraに映るまで待機させておき、映ったら動かす
①フィールドを広くする
まずは敵をたくさん配置するために、フィールドを広くしましょう〜Field1やField2をコピー&ペーストすることで楽にフィールドを増やせます〜また、Sprite画像にもうひとつあったBlockもPrefab化し配置すると、雰囲気が出るかと思います〜
ある程度まとめてコピペすると捗る
②敵キャラを待機させる処理を実装する
それではEnemy1Scriptに加筆して、敵キャラを待機させる処理を実装していきましょう〜
特定のカメラに映ってるかの判定【Unity】 - (:3[kanのメモ帳]
こちらのブログを参考にさせて頂きました〜ありがとうございます!
using UnityEngine; using System.Collections; public class Enemy1Script : MonoBehaviour { Rigidbody2D rigidbody2D; public int speed = -3; public GameObject explosion; public int attackPoint = 10; public GameObject item; private LifeScript lifeScript; //********** 開始 **********// //メインカメラのタグ名 constは定数(絶対に変わらない値) private const string MAIN_CAMERA_TAG_NAME = "MainCamera"; //カメラに映っているかの判定 private bool _isRendered = false; //********** 終了 **********// void Start () { rigidbody2D = GetComponent<Rigidbody2D>(); lifeScript = GameObject.FindGameObjectWithTag("HP").GetComponent<LifeScript>(); } void Update () { //********** 開始 **********// if (_isRendered) { rigidbody2D.velocity = new Vector2 (speed, rigidbody2D.velocity.y); } //********** 終了 **********// } void OnTriggerEnter2D (Collider2D col) { //********** 開始 **********// if (_isRendered) { 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); } } //********** 開始 **********// //Rendererがカメラに映ってる間に呼ばれ続ける void OnWillRenderObject() { //メインカメラに映った時だけ_isRenderedをtrue if(Camera.current.tag == MAIN_CAMERA_TAG_NAME){ _isRendered = true; } } //********** 終了 **********// }
Enemy1Script.cs
一番下に追加されたOnWillRendererObjectメソッドは、カメラに映っている間繰り返し呼ばれるメソッドです〜そのカメラのタグがMainCameraであった時、つまりメインカメラに映ったら、_isRenderedをtrueにします〜
_isRenderedがtrueになると、Updateメソッドが有効になり、敵キャラが動きだします〜また、OnTriggerEnter2Dの中も有効になり、ユニティちゃんバスターに当たった時にちゃんと死んでくれます〜
それでは敵キャラを配置していきましょう〜とりあえず僕は12体用意しましたが、もちろんもっと多く用意しても大丈夫です〜
また、Enemy2、Enemy3を用意するとバリエーションが出て面白いと思います〜
ドラッグ&ドロップ!
フィールドと敵キャラを自由に配置
【結果】
敵キャラがカメラに移った瞬間に動き始めるので、意図したタイミングで敵を発生させられるようになりました〜また、OnTriggerEnter2Dを無効にしてあるので流れ弾でステージを進む前に死んでしまうといったこともありません〜
今回はここまでです〜
ありがとうございました〜
【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】