【Unity】一回だけ衝突判定する

投稿者: | 2020-07-27

飛び道具などの衝突判定をコライダーでやると、敵の胴に当たった後に手などに当たることで2回当たったことになってしまうようなことがあるようです。転がっている武器に当たって敵が倒れることも避けたいので、同じオブジェクトは一回だけ衝突判定をするようにしてみます。

今回は、敵のボーンに付けるスクリプトで衝突を感知すると、それが武器なら、敵のルートのスクリプトにそのオブジェクトを保存して、次に同じものに衝突したときはスルーするようにします。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemyBodyScript : MonoBehaviour
{
    AgentAttackTest sc_agent;

    private void Start()
    {
        sc_agent = transform.root.GetComponent<AgentAttackTest>();
    }

    private void OnCollisionEnter(Collision collision)
    {
        Debug.Log("武器と衝突");

        if (collision.collider.tag == "Weapon" && collision.collider.gameObject != sc_agent.collidedObject)
        {

            sc_agent.SetHP(-0.4f);
            sc_agent.collidedObject = collision.collider.gameObject;

        }
    }

    private void OnTriggerEnter(Collider other)
    {
        if (other.tag == "Weapon")
        {
            sc_agent.SetHP(-0.4f);
            sc_agent.collidedObject = other.gameObject;

        }
    }
}

数を制限して複数のオブジェクトを保存しても良いかもしれません。

すると、転がっているスモークグレネードに当たっても敵が攻撃を受けなくなりました。新しいスモークグレネードが当たるとHPが減ります。

コメントを残す

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