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

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

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

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】