LemonteaのUnity部屋

LemonteaのUnity部屋

Unityの使い方とかです~

Unity 当たり判定 RigidbodyとIsTriggerの実験

こんにちは。レモンティーです。

Unityの当たり判定はコライダーで勝手にやってくれてとても便利です。

しかし、Colliderだけではダメで、Rigidbodyもついてないといけないらしいのですが、
最低限どれにつけておけばいいのかわからなくて試してみました。

また、IsTriggerについても、
お互いにIsTriggerでもいいのかどうか など疑問があったので実験しました。

そしてそれを取得する方法も、
OnCollisionとOnTriggerの2種類があります。
こちらは名前で想像がつきますが、一応見ておきました。


実験の内容としては、
2つのオブジェクトA,Bを用意して、Aに↓のスクリプトをつけて条件を変えながら衝突させ、コンソールへの出力をみて判断しました。

    void OnCollisionEnter(Collision collision)
    {
        if(collision.gameObject.tag == "Finish")
        {
            Debug.Log(Name+"OnCollision");
        }
    }

    void OnTriggerEnter(Collider other)
    {
        if(other.gameObject.tag == "Finish")
        {
            Debug.Log(Name+"OnTrigger");
        }
    }


まずRigidBodyについての実験です

Rigidbody有りが○、無しが×
衝突が判定されれば○、されなければ×です
f:id:sawalemontea:20170906205905p:plain

どちらか片方についていればいいみたいですね。

てっきり判定を受け取る側につけないといけないと思っていたのですが、
どちらにつけても関係ないようです。


次にIsTriggerの実験です。
先ほどRigidBodyはどちらにつけてもよいとわかったので、Bにつけてます

IsTriggerにチェックしたものが○

各マスの衝突判定の結果が2列になってますが
上がOnColision、下がOnTriggerです。

f:id:sawalemontea:20170906210918p:plain

どうも、どちらか一方でもIsTriggerなら、
OnTriggerで受け取るみたいです。

てっきり衝突した相手にあわせると思っていたので意外でした…

また、両方IsTriggerはなんの問題もないようです。


二つを通して言えるのは、
Unityの衝突ではどちらに付けたスクリプトで衝突の情報を受け取るか、は関係ない
ということですね。
ちょっと感覚と違っていたので実験してよかったです

というわけで、まとめると

RigidBodyは少なくとも一方に必要
どっちかがIsTriggerならその衝突はOnTriggerで判定

でした。

間違ってたらコメントで教えて頂けると幸いです。

今回はこれでおしまいです。