【Unity8】敵を倒す!Add Animation Event, Destroy, Instantiate【横スクロールユニティちゃん7】
Unity5.1.0f3 Personal(2015年6月)
このコンテンツは、『ユニティちゃんライセンス』で提供されています
前回まででユニティちゃんが歩いてジャンプして弾を撃つところまで作りましたので、今回は作って倒してみましょう〜
【目標】敵キャラを作って倒す
①敵キャラを作る
まずは敵キャラを作っていきます〜キャラクター素材はぴぽやさんのものを使わさせて頂きます〜上記サイトの、キャラクターチップ>ハロウィンキャラクターをダウンロードして下さい〜
今回はその中のがいこつのキャラを使っていきます〜SpritesフォルダへImportし、Inspectorビューを以下の設定にして下さい〜
続いてSprite Editorの設定です〜以下の通りに画像をカットして下さい〜
カットが完了したら、hone_3〜5の画像をまとめてドラッグして、Hierarchyビューにドロップします〜名前は「Enemy1」にしましょう〜
また、一緒に作成されたAnimationは名前を「Walk@Enemy1」、AnimatorControllerは名前を「Enemy1」に変更し、Animationsフォルダに入れましょう〜
ドラッグ&ドロップ!
それではまずEnemy1にコンポーネントをつけていきましょう〜Rigidbody2D、BoxCollider2D、CircleCollider2Dをつけていきます〜
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にすることで右から左へ移動させます〜
とりあえずここまでで敵キャラを動かすことができます!
敵が迫ってくる
②爆発アニメーションを作る
それでは敵を倒す処理を作っていきましょう〜その前に、敵を倒した時に発生させる爆発を作成します〜
先ほどと同じくぴぽやさんの素材を使わせていただきます〜
キャラクターチップにある爆弾と風船画像をダウンロードし、爆弾(bomb)のほうだけSpritesフォルダへImportしてください〜
Importが完了したら、先ほどと同様の手順で画像をカットしていきましょう〜
Sprite画像のInspectorビュー
32 * 32で画像をカット
カットが完了したら、bomb_27〜bomb_32をまとめてドラッグし、Hierarchyビューへドロップして下さい〜ドロップ後は名前をExplosionに変更しましょう〜
また、一緒に作成されたアニメーション・アニメーター共に名前をExplotionに変更しましょう〜
ドラッグ&ドロップ!
爆発は1回だけなので、ExplosionアニメーションのInspectorビューにあるLoop Timeのチェックを外しておきましょう〜
次にアニメーションが終了した時に、そのままゲーム画面上に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と出てくるので、クリックします〜
Add Animation Eventをクリック
するとメソッドを選択する画面が出てくるので、先ほど作成したDeleteExplosionメソッドを選択します〜
これで爆発アニメーションが終わった時に、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プレファブを設定しましょう〜
ドラッグ&ドロップ!
OnTriggerEnter2Dにて、ぶつかったオブジェクトのタグがBulletであった場合、自分自身を破壊して爆発アニメーションを呼び出しています〜
OnTriggerEnter2Dを実行するためにはBulletにCircle Collider2Dを付け、Is Triggerをtrueにする必要がありますので、そうします〜
また、Bulletという名前のタグを用意して取り付ける必要があります〜
タグの取り付け 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タグを取り付けて下さい!
Enemyタグを作って取り付ける
【結果】
敵が迫ってきて
倒す!爆発する!
なんとか敵を倒すところまで作れました〜
今回はここまでです〜
ありがとうございました〜
【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】