コガネブログ

平日更新を目標に Unity や C#、Visual Studio などのゲーム開発アレコレを書いていきます

【Unity 入門】全方位シューティングを作る 第10回 プレイヤーと敵の当たり判定

目次

前回のチュートリアル

はじめに

前回は、弾と敵の当たり判定を作成しました
今回は、プレイヤーと弾の当たり判定を作成していきます

プレイヤーに当たり判定の機能を追加

プレイヤーが敵に当たったらプレイヤーの HP を減らし、
プレイヤーの HP が 0 になったらプレイヤーを消すようにしていきます
そのために、まずはプレイヤーに当たり判定の機能を追加します

f:id:baba_s:20180331140741p:plain

「Player」オブジェクトを選択し、「Add Component」ボタンを押して
入力欄に「BoxCollider2D」と入力し、表示された「Box Collider 2D」を選択します

f:id:baba_s:20180331140812p:plain

そして、追加した「Box Collider 2D」の「Is Trigger」をチェックします

これで、プレイヤーに当たり判定の機能を追加できました

プレイヤーと敵が衝突した時のコードの実装

次は、プレイヤーが敵に当たったらプレイヤーの HP を減らし、
プレイヤーの HP が 0 になったらプレイヤーを消すコードを作成していきます

「Enemy」スクリプトをコードエディタで開き、
OnTriggerEnter2D 関数の先頭に下記のコードを記述します

// プレイヤーと衝突した場合
if ( collision.name.Contains( "Player" ) )
{
    // プレイヤーにダメージを与える
    var player = collision.GetComponent<Player>();
    player.Damage( m_damage );
    return;
}

次に「Player」スクリプトをコードエディタで開き、
変数の定義に下記のコードを追加します

public int m_hpMax; // HP の最大値
public int m_hp; // HP

さらに、Update 関数の上に下記のコードを記述します

// ゲーム開始時に呼び出される関数
private void Awake()
{
    m_hp = m_hpMax; // HP
}

そして、「Player」クラスの末尾に下記のコードを記述します

// ダメージを受ける関数
// 敵とぶつかった時に呼び出される
public void Damage( int damage )
{
    // HP を減らす
    m_hp -= damage;

    // HP がまだある場合、ここで処理を終える
    if ( 0 < m_hp ) return;

    // プレイヤーが死亡したので非表示にする
    // 本来であれば、ここでゲームオーバー演出を再生したりする
    gameObject.SetActive( false );
}

f:id:baba_s:20180331141334p:plain

最後に、Unity エディタに戻り、「Player」オブジェクトを選択し、
「Hp Max」(HP の最大値)に「100」と入力します

f:id:baba_s:20180331141419g:plain

これで、Unity を再生すると、
プレイヤーが敵に何回も当たっていると HP が 0 になり、
プレイヤーが消えることが確認できます

f:id:baba_s:20180331141533p:plain

「Hp Max」に小さい数値を入れてゲームを再生すると、
プレイヤーの最大 HP が小さくなり、プレイヤーが消えることが確認しやすくなります

次回は、弾が敵に当たった時に表示する爆発エフェクトを作成していきます

次のチュートリアル

チュートリアル一覧