この記事では、敵キャラクターを倒した時に視覚効果(アニメーション)をつける方法について解説します。敵キャラクターの本体にアニメーションをつける方法と、敵キャラクターの子オブジェクトにアニメーションをつける方法の2種類があります。
後者の方法では、敵キャラクターを表示しつつ、その前面に視覚効果も表示することができます。どのように見せたいかによって使い分けましょう。完成すると下記のような見た目になります。
敵キャラクターに子オブジェクトを設定する方法については、こちらの記事に整理しています。
アニメーションを使わない方法もあります。画像が用意できないときなどはこちらの方法(SlimeController.cs の Dying メソッドを参照)がよいかもしれません。
目次
【準備】アニメーション用の画像のサイズを調整する
1.アニメーション用の画像を、敵キャラクターのスケールに合わせる
敵キャラクターのスケールに合わせて、アニメーション用の画像も拡大・縮小されます。それを考慮するため、アニメーション用の画像のスケールを敵キャラクターのスケールに合わせておきます。
この記事で使用する画像は「Sunny Land」の「Sprites」⇒「Fx」⇒「enemy-death」の中にある6枚の画像です。
敵キャラクターとアニメーション用の画像のサイズの調整が必要な場合は、次の「2.アニメーション用の画像のピクセル数を調整する」に進みます。ちょうどよいサイズだった場合は、スキップして次に進んでください。
2.アニメーション用の画像のピクセル数を調整する
アニメーションに使う画像を選択し、インスペクターから「ユニット毎のピクセル数」を変更してサイズを調整します。画像のひとつずつを変更するのは大変なので、アニメーションに利用する画像の全てを選択して一括でサイズを変更します。
【Unity側設定1】アニメーションを登録する
方法2「敵キャラクターの子オブジェクトにアニメーションつける」を例にして説明していきます。方法1の場合は、選択するゲームオブジェクトが変わるだけで(①)、②以降の作業は同じです。
【Unity側設定2】アニメーターを登録する
共通1,2が完了した人はゲームをプレイしてみてください。すると、下記の動画のようにアニメーションが自動で始まってしまうと思います。ここでは、これを修正していきます。
ゲームをプレイして、敵が倒されるアニメーションが動作しなくなれば OK です。
【プログラミング】
ここでも、方法2「敵キャラクターの子オブジェクト(当たり判定用)にアニメーションつける」を例にして説明していきます。
方法1の場合は、子オブジェクトに記載している OnTriggerEnter2D メソッド(DinoHeadController.cs)を、敵キャラクターのスクリプト(DinoController.cs)に記述します。
DinoController(敵キャラクターのスクリプト)
Dead メソッドは子オブジェクトから呼び出されます。Dead メソッドの中では、敵キャラクターを Destroy(破棄)します。
using UnityEngine;
public class DinoController : MonoBehaviour
{
public void Dead()
{
Destroy(gameObject);
}
}
DinoHeadController(子オブジェクトのスクリプト)
親オブジェクトのスクリプト(dinoController)を取得して、親オブジェクトの Dead メソッドを実行します。親オブジェクトを Destroy することで子オブジェクトも Destroy されます。
プレイヤーとの接触時(OnTriggerEnter2D メソッド)に、アニメーション「EnemyDeath」を実行します。
子オブジェクトの Dead メソッドは、アニメーションが終わったタイミングでアニメーションイベントから呼び出されます。
using UnityEngine;
public class DinoHeadController : MonoBehaviour
{
private DinoController dinoController;
private void Start()
{
GameObject dinoObj = transform.parent.gameObject;
dinoController = dinoObj.GetComponent<DinoController>();
}
private void OnTriggerEnter2D(Collider2D collision)
{
var player = collision.gameObject.GetComponent<PlayerController>();
if (player != null)
{
Animator animater = GetComponent<Animator>();
animater.Play("EnemyDeath");
}
}
private void Dead()
{
dinoController.Dead();
}
}
プログラムを作成したら、ゲームオブジェクトにアタッチします。
DinoController.cs ⇒ Dino1
DinoHeadController.cs ⇒ Dino1Head
【Unity側設定3】アニメーションイベントを登録する
アニメーションが終わったタイミングで敵キャラクターが消滅するようにします。アニメーションイベントを利用します(アニメーションイベントについてはこちらの記事で詳しく解説しています)。
以上の内容を実施すると、敵キャラクターを倒した時の視覚効果(アニメーション)が表現できると思います。おつかれさまでした。