こんなエラーが出ました。
[Physics.PhysX] RigidBody::setRigidBodyFlag: kinematic bodies with CCD enabled are not supported! CCD will be ignored.
CCDってなんだ。これだ・・・Unity - Manual: Continuous collision detection (CCD)
高速時にオブジェクトを抜けなくするための設定です。isKinematic
を有効にした場合、Rigidbodyによる移動ではなくなるので、CCDが効かなくなるということで、2018.3ではエラーになってしまうようです。
エラー表示にはなってますが、Playできるので本来は警告で表示するはずだったのを、エラーログで出しちゃってるっぽいです。ただ、効果がないなら直した方がいいのでエラー表示でもいいかも。
目次
原因
以下のような設定をしていると、エラーになります。
Is Kinematicを有効にする場合は、Collision DeteictionはDescreteにします。
以下ならOK。
問題のゲームオブジェクトを探す
Hierarchyウィンドウの検索バーにRigidbody
と入力すれば、Rigidbodyを持っているゲームオブジェクトが見つかります。表示されたオブジェクトをチェックして、問題ないか確認します。
問題のある個所が見つからない時
Hierarchyにあるオブジェクトが全て問題ないのに、Playの終了時にエラーが発生する場合があります。その場合はプレハブを確認してみてください。登場しているオブジェクトに問題がなくても、プレハブにisKinematic
が有効で、Discrete
以外の衝突検出モードを設定しているとエラーが出ました。
スクリプトでの切り替え方
スクリプトで切り替えたい場合は以下のような感じです。
Rigidbody rb = GetComponent<Rigidbody>();
rb.collisionDetectionMode = CollisionDetectionMode.Discrete;
rb.isKinematic = true;