名古屋でアプリ・VR開発を行っています
ワクワクできるゲームをガンガン開発リリース中!

【Unity】Rigidbodyの「Collision Detection」でちょっと驚いた話

みなさん、こんにちは!SAT-BOXのツバメです。

 

今回はUnityのRigidbodyの機能の1つ「Collision Detection」についてのお話です。

Unityで物理を使ったゲームに欠かせない「Rigidbody」ですが、その中の機能の

「Collision Detection」は、物体との衝突検知の精度を高めるといった、使用頻度の高い

機能だと思います。設定を「Continuous Dynamic」にしてゲーム実行!すると…。

f:id:sat-box:20201111082415p:plain

あれ…?「Continuous Speculative」に変わってる?

いやいや、設定ミスだろうと思いもう一度設定しましたが、直らず…!

 

なんで…?Unityのバグか…?そう思い色々調べて見たところ、あることが発覚!

https://i.gyazo.com/24815624ece2c6b13a5cb00bb6e8b589.gif

どうやら、「Is Kinematic」をONにすると強制的に変更されてしまうみたいでした…。

ゲーム中にスクリプトで「Is Kinematic」をON・OFFしている部分があるので、それの

影響だったみたいです。また「Continuous」の時も同様に設定を変えられてしまうみた

いです。

 

どうやらUnityの仕様らしく、いつ頃からこの仕様になったかは分からないですが、おそ

らく「Continuous Speculative」が導入されたUnity2018.3以降だと思います。

Unity2017の時には特に問題なかったので、いつも通りの感覚で使用していたのが悪か

ったです。この仕様で特に厄介なのは、「Is Kinematic」をOFFにしても、「Continuous

Speculative」のままだという部分です。「Continuous Speculative」だとゴースト衝突

発生してしまうので、接触判定の挙動が思ったとおりにならない可能性があります。

(ゴースト衝突についてはコチラを参考に→CCD (連続的衝突判定) - Unity マニュアル)

 

対策方法

スクリプト上で「Is Kinematic」をOFFにする時に、「Collision Detection」の設定をして

あげれば解決します。

f:id:sat-box:20201111084819p:plain

 

この仕様はUnity2018以前の開発者は知らないのでは?私は知らなかったです。

(自分だけ知らなかった可能性も…)

これからRigidbodyを使用していく方は気をつけたほうが良いかもしれないです。

 

以上、ツバメでした!