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

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

【Unity8】敵を倒す!Add Animation Event, Destroy, Instantiate【横スクロールユニティちゃん7】

Unity5.1.0f3 Personal(2015年6月)

f:id:hiyotama:20150618122504p:plain


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

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

前回の続きです〜

前回まででユニティちゃんが歩いてジャンプして弾を撃つところまで作りましたので、今回は作って倒してみましょう〜

【目標】敵キャラを作って倒す

①敵キャラを作る

まずは敵キャラを作っていきます〜キャラクター素材はぴぽやさんのものを使わさせて頂きます〜上記サイトの、キャラクターチップ>ハロウィンキャラクターをダウンロードして下さい〜


今回はその中のがいこつのキャラを使っていきます〜SpritesフォルダへImportし、Inspectorビューを以下の設定にして下さい〜


f:id:hiyotama:20150616141112p:plain


続いてSprite Editorの設定です〜以下の通りに画像をカットして下さい〜


f:id:hiyotama:20150616141220p:plain


カットが完了したら、hone_3〜5の画像をまとめてドラッグして、Hierarchyビューにドロップします〜名前は「Enemy1」にしましょう〜
また、一緒に作成されたAnimationは名前を「Walk@Enemy1」、AnimatorControllerは名前を「Enemy1」に変更し、Animationsフォルダに入れましょう〜


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


それではまずEnemy1にコンポーネントをつけていきましょう〜Rigidbody2D、BoxCollider2D、CircleCollider2Dをつけていきます〜


f:id:hiyotama:20150616142345p:plain

rotationをフリーズすることで倒れなくし、各コライダーのサイズ調整を行いました〜


次にEnemyを動かすスクリプト、Enemy1Scriptを作成していきます〜以下ソースです〜

using UnityEngine;
using System.Collections;

public class Enemy1Script : MonoBehaviour {
	
	Rigidbody2D rigidbody2D;
	public int speed = -3;

	void Start () {
		rigidbody2D = GetComponent<Rigidbody2D>();
	}
	
	void Update () {
		rigidbody2D.velocity = new Vector2 (speed, rigidbody2D.velocity.y);
	}
}

Enemy1Script.cs


ユニティちゃんを動かしたvelocityを敵キャラでも使用して動かしています〜

speedを-3にすることで右から左へ移動させます〜


とりあえずここまでで敵キャラを動かすことができます!


f:id:hiyotama:20150616144805p:plain
敵が迫ってくる


②爆発アニメーションを作る
それでは敵を倒す処理を作っていきましょう〜その前に、敵を倒した時に発生させる爆発を作成します〜

先ほどと同じくぴぽやさんの素材を使わせていただきます〜
キャラクターチップにある爆弾と風船画像をダウンロードし、爆弾(bomb)のほうだけSpritesフォルダへImportしてください〜


Importが完了したら、先ほどと同様の手順で画像をカットしていきましょう〜


f:id:hiyotama:20150616145458p:plain
Sprite画像のInspectorビュー


f:id:hiyotama:20150616145520p:plain
32 * 32で画像をカット


カットが完了したら、bomb_27〜bomb_32をまとめてドラッグし、Hierarchyビューへドロップして下さい〜ドロップ後は名前をExplosionに変更しましょう〜
また、一緒に作成されたアニメーション・アニメーター共に名前をExplotionに変更しましょう〜


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


爆発は1回だけなので、ExplosionアニメーションのInspectorビューにあるLoop Timeのチェックを外しておきましょう〜


f:id:hiyotama:20150616150142p:plain


次にアニメーションが終了した時に、そのままゲーム画面上にExplosionオブジェクトが残らないようにするために、ExplosionScriptを作成して取り付けます〜以下ソースです〜

using UnityEngine;
using System.Collections;

public class ExplosionScript : MonoBehaviour {

	public void DeleteExplosion ()
	{
		Destroy(gameObject);
	}
}

ExplosionScript.cs


DeleteExplosionメソッドを呼び出しオブジェクトを削除を削除しています〜それでは次に、ExplosionオブジェクトのAnimationビューでDeleteExplosionメソッドを呼び出す設定をしましょう!


まずはダイヤマークが並ぶ欄の一段上、その中でもアニメーションの最後らへんを右クリックして下さい〜すると、Add Animation Eventと出てくるので、クリックします〜


f:id:hiyotama:20150616150817p:plain
Add Animation Eventをクリック


するとメソッドを選択する画面が出てくるので、先ほど作成したDeleteExplosionメソッドを選択します〜


f:id:hiyotama:20150616151107p:plain


これで爆発アニメーションが終わった時に、Explosionオブジェクトが消えるようになりました〜

完成したExplosionオブジェクトはPrefabsフォルダへ移しておきましょう〜




③敵を倒す
それでは敵を倒していきましょう〜Enemy1Scriptに加筆していきます〜

using UnityEngine;
using System.Collections;

public class Enemy1Script : MonoBehaviour {
	
	Rigidbody2D rigidbody2D;
	public int speed = -3;
//********** 開始 **********//
	public GameObject explosion;
//********** 終了 **********//

	void Start () {
		rigidbody2D = GetComponent<Rigidbody2D>();
	}
	
	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);
		}
	}
//********** 終了 **********//
}

Enemy1Script.cs


まずはpublic変数explosionに、先ほど作成したExplosionプレファブを設定しましょう〜


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


OnTriggerEnter2Dにて、ぶつかったオブジェクトのタグがBulletであった場合、自分自身を破壊して爆発アニメーションを呼び出しています〜

OnTriggerEnter2Dを実行するためにはBulletにCircle Collider2Dを付け、Is Triggerをtrueにする必要がありますので、そうします〜


また、Bulletという名前のタグを用意して取り付ける必要があります〜


f:id:hiyotama:20150616152852p:plain
タグの取り付け Is Triggerにチェック サイズ小さく


次にBulletオブジェクトに付いているBulletScriptのほうも少し加筆します〜以下ソースです〜

using UnityEngine;
using System.Collections;

public class BulletScript: MonoBehaviour {
	
	private GameObject player;
	private int speed = 10;
	
	void Start () {
		player = GameObject.FindWithTag("UnityChan");
		Rigidbody2D rigidbody2D = GetComponent<Rigidbody2D>();
		rigidbody2D.velocity = new Vector2 (speed * player.transform.localScale.x, rigidbody2D.velocity.y);
		Vector2 temp = transform.localScale;
		temp.x = player.transform.localScale.x;
		transform.localScale = temp;
		Destroy(gameObject, 5);
	}
//********** 開始 **********//
	void OnTriggerEnter2D (Collider2D col)
	{
		if (col.gameObject.tag == "Enemy") {
			Destroy(gameObject);
		}
	}
//********** 終了 **********//
}

BulletScript.cs


同じくOnTriggerEnter2Dを実装し、ぶつかったオブジェクトのタグがEnemyだった時、Bulletを削除しています〜有効にするため、Enemy1オブジェクトにEnemyタグを取り付けて下さい!


f:id:hiyotama:20150616153244p:plain
Enemyタグを作って取り付ける


【結果】


f:id:hiyotama:20150616153421p:plain
敵が迫ってきて


f:id:hiyotama:20150616153436p: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】