質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

5450閲覧

Non-convex メッシュのエラーと、その検出方法

yamatarou

総合スコア7

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

1クリップ

投稿2019/08/06 12:43

刃物でオブジェクトを切る、メッシュカットスクリプトを使って
オブジェクトを切り刻めるプロジェクトを作っています。

細かくオブジェクトを切断していくと、まれにエラーが発生するメッシュが生産されてしまうようで、

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 "right side", Mesh asset path "" Mesh name "Split Mesh Right"

上記のエラーが発生します。

生産されたオブジェクトに、MeshColliderをアタッチしているのですが、
その時に生産された非凸メッシュのオブジェクトにも、MeshColliderをアタッチしているのが問題なようです。

そこで、この非凸メッシュを検出して、その場合オブジェクトを削除してしまうスクリプトを組みたいのですが、

生産された非凸メッシュを検出する方法はなにかありますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

単純にMeshColliderがconvexかどうかを判別するだけであれば、meshCollider.convexを参照してfalseであれば非凸です。
生産されたオブジェクトを取得するようなイベントがあれば、生産されたオブジェクトをobjとして、

C#

1 2bool isConvex = obj.GetComponent<MeshCollider>().convex; 3

で判定することができます。

投稿2019/08/06 12:56

Ram.Type-0

総合スコア424

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamatarou

2019/08/06 13:42

MeshColliderのConvexがオン・オフではなく、メッシュそのものがNon-convex(形状がおかしくなってしまったメッシュ)かどうか知りたいです。 Non-convexのメッシュを持ったGameObjectにMeshColliderをアタッチして、使おうとするとエラーが出てしまうため…
Ram.Type-0

2019/08/06 13:47

実際はConvexでないメッシュでもMeshColliderのConvexをオンにすれば強制的にConvexな形のコライダーにされ(凹んだ部分は埋め立てられ)、Rigidbodyで利用してもエラーは発生しなくなります。
yamatarou

2019/08/06 13:53

回答ありがとうございます。 そうなのですか! ということは…。 以下のエラーも出ていたのですが、そのConvexの形のコライダーを生成するのにも問題が 発生しているということでしょうか。 Failed to create Convex Mesh from source mesh "Split Mesh Right". Source mesh is likely have too many smooth surface regions. Please reduce the surface smoothness of the source mesh. Alternatively turn on Inflate Mesh and increase the Skin Width sufficiently for this mesh. UnityEngine.MeshCollider:set_convex(Boolean) my_Useof_MeshCut_old:BoolOn() (at Assets/myScript/my_Useof_MeshCut_old.cs:48)
Ram.Type-0

2019/08/06 14:02

ConvexなMeshColliderはコライダーの形状が255ポリゴンまで、という制限がありますが、この制限に引っかかってしまったようですね。 meshCol.cookingOptions |= MeshColliderCookingOptions.InflateConvexMesh; としてからconvexにすることで自動でポリゴンを削減してからConvex化を行うようになり、問題を回避できます。
yamatarou

2019/08/06 14:28

有益な回答ありがとうございます。 当方、現在2017.2..0のバージョンで作業しております。 調べてみたところ、次のバージョンから実装されている機能なのですね(汗 バージョンを上げることを検討してみます…。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問