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

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

【Unity8】敵キャラを待機させる!MainCamera, OnWillRenderObject【横スクロールユニティちゃん12】

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


スポンサーリンク

Unity5.1.0f3 Personal(2015年6月)

f:id:hiyotama:20150618122504p:plain


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

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

前回の続きです〜

今回は、敵キャラをステージに待機させておいて、Main Cameraに移った時に動かす処理を追加していきます〜

【目標】敵キャラがMain Cameraに映るまで待機させておき、映ったら動かす

①フィールドを広くする

まずは敵をたくさん配置するために、フィールドを広くしましょう〜Field1やField2をコピー&ペーストすることで楽にフィールドを増やせます〜また、Sprite画像にもうひとつあったBlockもPrefab化し配置すると、雰囲気が出るかと思います〜


f:id:hiyotama:20150618171347p:plain
ある程度まとめてコピペすると捗る


②敵キャラを待機させる処理を実装する
それでは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を用意するとバリエーションが出て面白いと思います〜


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

f:id:hiyotama:20150618172957p:plain
フィールドと敵キャラを自由に配置


【結果】


f:id:hiyotama:20150618173216p:plain



敵キャラがカメラに移った瞬間に動き始めるので、意図したタイミングで敵を発生させられるようになりました〜また、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】

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

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