tanaka's Programming Memo

プログラミングについてのメモ。

Unity2018.3.1にしたらRigidBodyのkinematicでなんかエラーが出た

こんなエラーが出ました。

[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できるので本来は警告で表示するはずだったのを、エラーログで出しちゃってるっぽいです。ただ、効果がないなら直した方がいいのでエラー表示でもいいかも。

目次

原因

以下のような設定をしていると、エラーになります。

f:id:am1tanaka:20190115191150p:plain
エラー例

Is Kinematicを有効にする場合は、Collision DeteictionDescreteにします。

以下ならOK。

f:id:am1tanaka:20190115191530p:plain
正しい設定

問題のゲームオブジェクトを探す

Hierarchyウィンドウの検索バーにRigidbodyと入力すれば、Rigidbodyを持っているゲームオブジェクトが見つかります。表示されたオブジェクトをチェックして、問題ないか確認します。

f:id:am1tanaka:20190115195145p:plain
オブジェクトの見つけ方

問題のある個所が見つからない時

Hierarchyにあるオブジェクトが全て問題ないのに、Playの終了時にエラーが発生する場合があります。その場合はプレハブを確認してみてください。登場しているオブジェクトに問題がなくても、プレハブにisKinematicが有効で、Discrete以外の衝突検出モードを設定しているとエラーが出ました。

スクリプトでの切り替え方

スクリプトで切り替えたい場合は以下のような感じです。

Rigidbody rb = GetComponent<Rigidbody>();
rb.collisionDetectionMode = CollisionDetectionMode.Discrete;
rb.isKinematic = true;

参考URL