| この記事の要点 |
|
エラー内容
Unity のコンソールに次のエラーが表示され、対象オブジェクトの衝突判定が正しく動作しません。
Non-convex MeshCollider with non-kinematic Rigidbody is no longer supported in Unity 5.
If you want to use a non-convex mesh either make the Rigidbody kinematic or remove the Rigidbody component. Scene hierarchy path "MyAircraft", Mesh asset path "~"
メッセージの意味は「凸でない MeshCollider と、キネマティックでない Rigidbody の組み合わせは Unity 5 からサポートされなくなった。凹形状のメッシュを使いたいなら Rigidbody をキネマティックにするか、Rigidbody コンポーネントを削除せよ」です。Scene hierarchy path にエラーの出ているオブジェクト名(この例では MyAircraft)、Mesh asset path に使われているメッシュのファイルが表示されるので、まずそこを確認します。
原因
同じ GameObject(または子オブジェクト)に次の 2 つが同時に付いていることが原因です。
- MeshCollider で Convex のチェックが外れている(=モデルのポリゴン形状そのままの凹形状コライダー)
- Rigidbody で Is Kinematic のチェックが外れている(=重力や力で動く動的な剛体)
Unity の物理エンジン(PhysX)では、動的な剛体同士の衝突計算は凸形状を前提にしています。凹形状のメッシュ同士の衝突計算は非常に重く不安定なため、Unity 5 で PhysX 3 系に移行した際にこの組み合わせが禁止されました。凹形状の MeshCollider は「動かない地形や建物」に使うもの、と覚えておくと判断しやすくなります。
なお、Is Trigger を有効にした MeshCollider も Convex が必須です。トリガーとして使いたい場合も同じ考え方で対処します。
対処法
オブジェクトを「物理演算で動かしたいか」「形状の正確さが必要か」で対処を選びます。
| 対処 | 向いているケース | デメリット |
|---|---|---|
| MeshCollider の Convex にチェック | 重力・衝突で自然に動かしたい小物や乗り物 | 凹みが埋まった形(凸包)になる。メッシュの三角形数に上限がある |
| Rigidbody の Is Kinematic にチェック | スクリプトやアニメーションで位置を動かすもの(動く床、エレベーター等) | 重力や他の物体からの力では動かなくなる |
| Rigidbody を削除 | 地形・建物・壁など動かないもの | そのオブジェクトは物理で一切動かない |
| プリミティブコライダーの組み合わせに置き換え | 形状の再現と物理挙動の両方が必要な場合(飛行機、車体など) | コライダーの配置作業が必要 |
対処 1: Convex にチェックを入れる
- Hierarchy でエラーの出ているオブジェクトを選択する
- Inspector の Mesh Collider コンポーネントで Convex にチェックを入れる
- Scene ビューで緑色のコライダー形状を確認し、凹みが埋まっても問題ないかを見る
Convex を有効にすると、Unity はメッシュを包む凸形状(凸包)を自動生成します。このとき使える三角形数には上限(255)があり、細かいメッシュは簡略化されます。カップの内側やトンネルのような「中に入る」形状は埋まってしまうので注意が必要です。
対処 2: Is Kinematic にチェックを入れる
Inspector の Rigidbody で Is Kinematic にチェックを入れます。キネマティックな剛体は物理演算では動かず、transform や Rigidbody.MovePosition でスクリプトから動かします。他の動的な剛体を押し出すことはできるため、動く床や扉などに向いています。
対処 3: 複合コライダーに置き換える
エラー例の「MyAircraft」のように、飛行機を物理で飛ばしつつ形状もある程度再現したい場合は、MeshCollider をやめて子オブジェクトに Box Collider や Capsule Collider を複数配置します。親に Rigidbody を 1 つ付ければ、子のコライダーはまとめて 1 つの剛体として扱われます(複合コライダー)。
MyAircraft (Rigidbody)
├── Body (Capsule Collider) 胴体
├── WingL (Box Collider) 左翼
├── WingR (Box Collider) 右翼
└── Tail (Box Collider) 尾翼
プリミティブコライダーは計算が軽く挙動も安定するため、ゲーム全体のパフォーマンス面でも有利です。
スクリプトから設定する場合
実行時にメッシュを差し替えるなど、コードで設定する場合は次のように書きます。
using UnityEngine;
public class ColliderSetup : MonoBehaviour
{
void Awake()
{
var meshCollider = GetComponent<MeshCollider>();
var rb = GetComponent<Rigidbody>();
if (meshCollider != null && rb != null && !rb.isKinematic)
{
// 動的な Rigidbody と組み合わせるなら Convex 必須
meshCollider.convex = true;
}
}
}
確認方法
- コンソールをクリア(Clear)してから再生し、同じエラーが出ないことを確認する
- Scene ビューで Gizmos を表示し、緑色のコライダー形状が意図した範囲になっているか確認する
- 他のオブジェクトとぶつけて、すり抜けや不自然な跳ね返りがないか試す
エラーが消えない場合は、子オブジェクトにも MeshCollider が付いていないかを確認してください。親に Rigidbody があると、子の MeshCollider も同じ制約を受けます。
よくある質問
Unity 4 のプロジェクトを開いたら大量に出るようになった
Unity 4 までは許可されていた組み合わせのため、古いプロジェクトやアセットをアップグレードすると表面化します。上記の対処をオブジェクトごとに適用してください。
地形(Terrain)や建物にも Rigidbody が付いている
動かないオブジェクトには Rigidbody は不要です。削除すれば凹形状の MeshCollider のまま使えます。
関連
- Unityの衝突検知(Collision)|Collider・Rigidbody・Triggerの使い方
- Unity で重力を変更する方法 — Physics.gravity / Rigidbody / 2D 対応
- Unity Mesh コンポーネント完全ガイド
- Unity Standard Assets「Vehicles」削除後の代替|Wheel Collider
子ページはありません
- Non-convex MeshCollider with non-kinematic Rigidbody is no longer supported in Unity 5.
- Script error: OnCollisionEnter
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38