みなさん、こんにちは!SAT-BOXのツバメです。
今回はUnityのRigidbodyの機能の1つ「Collision Detection」についてのお話です。
Unityで物理を使ったゲームに欠かせない「Rigidbody」ですが、その中の機能の
「Collision Detection」は、物体との衝突検知の精度を高めるといった、使用頻度の高い
機能だと思います。設定を「Continuous Dynamic」にしてゲーム実行!すると…。
あれ…?「Continuous Speculative」に変わってる?
いやいや、設定ミスだろうと思いもう一度設定しましたが、直らず…!
なんで…?Unityのバグか…?そう思い色々調べて見たところ、あることが発覚!
どうやら、「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」の設定をして
あげれば解決します。
この仕様はUnity2018以前の開発者は知らないのでは?私は知らなかったです。
(自分だけ知らなかった可能性も…)
これからRigidbodyを使用していく方は気をつけたほうが良いかもしれないです。
以上、ツバメでした!