【Unity】爆発のダメージ判定をする

投稿者: | 2020-08-10

前の記事ではグレネードが爆発すると敵は毎回同じダメージを受けていましたが、転がったグレネードからの距離に応じてダメージ判定をして、敵の受けるダメージを変えてみます。

まずグレネードのスクリプトで敵との距離を調べてダメージの大きさを計算します。

void Explode()
{
    GameObject[] enemys = GameObject.FindGameObjectsWithTag("Agent"); // 敵を探す

    Vector3 center = transform.position; // グレネードの位置

    // 敵がいれば
    if (enemys.Length != 0)
    {
        foreach (GameObject e in enemys)
        {
            AgentAttackTest sc_agent = e.GetComponent();


            if (sc_agent)
            {
                // 敵との距離
                float distance = Vector3.Distance(e.transform.position, center);

                if (distance <= 20f)
                {

                    sc_agent.Explode(center, 1f - distance * 0.05f);
                        
                }
            }
        }
    }

...

ダメージの大きさは、距離が20mのときに最小の0、距離が0mのときに最大の1になります。冒頭のGIF画像では画面に距離とダメージを表示しています。距離が20より大きいときは敵はダメージを受けません。

この値を敵に付けたスクリプトの爆発のメソッドの引数に渡して、そこでHPを減らします。

public void Explode(Vector3 center, float damage)
{

    // 体力を増減してゲージに反映
    HP += -damage;
    HP = Mathf.Clamp(HP, 0f, 1f);
    HpImage.fillAmount = HP;

...

これでグレネードのダメージ判定ができました。

アイテムや敵が受ける力の強さはRigidbody.AddExplosionForceを使えば距離に応じて自動で減少します。

コメントを残す

メールアドレスが公開されることはありません。