この記事では、アニメーションの中にある攻撃の当たり判定を方法を解説します。当たり判定の有効・無効の切り替えが重要です。どのように実現しているか確認してみてください。
目次
作るもの(完成形)
「Hero Knight – Pixel Art」のシーン「Demo」に追加していく形で作成しました(敵のスプライトは他のアセットを利用しています)。攻撃のアニメーションのときだけ、当たり判定を有効にするところがポイントです。
ゲームオブジェクトの概要
構成(ヒエラルキー)
「Hero Knight – Pixel Art」のシーン「Demo」に、追加するゲームオブジェクトは下図の赤枠部分です。
■ AttackSensor:
攻撃の当たり判定。攻撃のアニメーションのときだけ有効にする。それ以外は無効にする。
■ Dino1、2:
敵
シーン上のゲームオブジェクト
それぞれのゲームオブジェクトは、下図のようにシーン上に配置します。
ゲームオブジェクトの詳細
AttackSensor(攻撃の当たり判定)
■ Polygon Collider 2D:
剣の形に合わせてコライダーを設定します。
アニメーションの中に攻撃のスプライト(画像)があります。下記の手順で攻撃時のスプライトを表示・確認することができます。
■ AttackSensorController:
スクリプトです。
Dino(敵)
■ Rigidbody 2D:
重力をつけるために追加します。
■ Capsule Collider 2D:
当たり判定に使用します。
■ DinoController:
敵のスクリプトです。
プログラム
プログラムの流れ
アニメーション中の攻撃しているスプライトのときだけ、当たり判定を有効にする必要があります。これは、「アニメーションイベント」を利用して実現できます。「アニメーションイベント」は、「アニメーション」ウィンドウから追加します。
攻撃のスプライトの前後で、AttackStart メソッドと AttackEnd メソッドを実行します。これらのメソッドの中で当たり判定の有効、無効を切り替えます。
プログラムの中身
HeroKnight.cs(プレイヤーのスクリプト)
もともとある HeroKnight.cs に以下のプログラムを追加します。
private void AttackStart()
{
attackSensorCtroller.gameObject.SetActive(true);
if (GetComponent<SpriteRenderer>().flipX)
{
attackSensorCtroller.transform.localScale = new Vector2(-transform.localScale.x, transform.localScale.y);
}
else
{
attackSensorCtroller.transform.localScale = new Vector2(transform.localScale.x, transform.localScale.y);
}
}
private void AttackEnd()
{
attackSensorCtroller.gameObject.SetActive(false);
}
■ 1 行目:AttackStart
攻撃のスプライトが表示される直前に実行されます
■ 3 行目:
当たり判定を有効にします
■ 4~11 行目:
プレイヤーの向きに合わせて、当たり判定の向きも変えています。
※プレイヤーが Scale を使って向きを変えている場合はこのプログラムは不要です(親オブジェクトに合わせて子オブジェクトの向きが変わります)
■ 14 行目:
攻撃のスプライトが表示された後に実行されます
■ 16 行目:
当たり判定を無効にします
AttackSensorController.cs(攻撃の当たり判定)
中身はありません。空のスクリプトです。
DinoController.cs(敵のスクリプト)
using UnityEngine;
public class DinoController : MonoBehaviour
{
private void OnTriggerEnter2D(Collider2D collision)
{
var attackSensor = collision.gameObject.GetComponent<AttackSensorController>();
if (attackSensor != null)
{
Destroy(gameObject);
}
}
}
■ 8 ~ 11 行目:
剣の当たり判定に当たったら、敵を消滅させます。
アニメーションイベントの登録
HeroKnight.cs に追加した AttackStart メソッドと、AttackEnd メソッドが攻撃時に呼び出されるようにします。「アニメーション」ウィンドウを開いて、アニメーションイベントに登録します。
以上で、「アニメーションの中にある攻撃の当たり判定」が設定できたと思います。お疲れ様でした。