ThinPlateCollider(薄い板のコライダー・厚み0の片面メッシュ(板・布・旗・フェンス・葉っぱ)に、厚みのある薄い BoxCollider を自動生成・Unityエディター拡張) | 元のオブジェクトは変更せず子に生成(買い切り)
- ダウンロード商品¥ 1,000





曲がった旗や板・葉っぱなど、厚み0の片面メッシュに、薄い BoxCollider を並べる作業を自動化する Unity エディター拡張です。元のメッシュは変更せず、生成後は Play で当てて確認します。厚み0のメッシュに MeshCollider を付けても、制作側の Unity 6 の環境では、裏から当たりませんでした(球を Continuous にしても同じ)。生成した Box なら、この試験条件では、動く側を Continuous にすれば既定の 2cm のままで止まりました。片面メッシュの面を「同じ平面に乗っているかたまり」に分け、それぞれを薄い BoxCollider(回転つき)で覆います。選んだオブジェクトの子に ThinColliders というオブジェクトを作って Box を並べるだけで、元のオブジェクトの Transform・コンポーネント・メッシュは変更しません。 【範囲】できるのは、厚み0の片面メッシュ向けの当たり判定の生成です。「絶対にすり抜けない」ことの保証はしません。速い物体のすり抜けは、衝突条件(速さ・Fixed Timestep・Collision Detection など)で変わります。動く側を Continuous にできない場合に備え、本ツールは、Discrete でのすり抜けを減らすための目安として、推奨厚み(2 × 最大速度 × Fixed Timestep + 1mm)を計算します。閉じた立体(箱・球など体積のあるモデル)の分割は対象外です(そちらは姉妹品 LiteColliderMaker 向けです)。 【対象になる素材(購入前にご確認ください)】 ・Unity に取り込み済みの Mesh(MeshFilter / SkinnedMeshRenderer)が付いた GameObject が対象です。複数の三角形でできていても、厚みのない一枚の表面として作られたメッシュが対象です。Read/Write が無効のメッシュも、Editor 上で読み取れる範囲で処理します ・購入前の確認方法の目安:Project でメッシュを選び、厚みのない一枚の表面(板・Plane・Quad・旗・葉など)であることをご確認ください。体積のあるモデルには向きません ・SkinnedMeshRenderer は、選択した時点の姿勢を焼いた形で処理します。生成後に変形しても Box は追従しません ・当たり判定を作る元のモデルの利用条件は、元の配布元の規約に従ってください。加工(当たり判定の追加)が許されているかは、モデルごとにご確認ください 【確認状況(購入前にお読みください)】体験版はありません。購入前の確認は、販売画像と説明文でお願いします。動作確認は Windows / Unity 6(6000.5)のみです。Unity 2022.3 LTS、URP / HDRP の実プロジェクトでの動作は未確認です。VRChat SDK を導入したプロジェクト、ワールドのビルド・アップロード、VRChat 内でのプレイヤーとの衝突は未確認です。ウィンドウの見た目・Scene のワイヤー表示・確認ダイアログは、制作側では自動テストでの確認までで、手で触っての確認をしていません。販売画像の板・Box・球の軌跡と数値は、制作側で Unity 6 を実際に動かして得た出力ですが、エディター画面そのもののスクリーンショットではありません。 買い切り1,000円・追加費用なしです。本製品は SaiRollStudio が制作した非公式ツールであり、Unity Technologies の公式製品ではありません。 【こんなお困りごとに】 ・Plane や片面メッシュ(看板・フェンス・旗・葉っぱ・薄い床・紙)に MeshCollider を付けたが、速い物体がすり抜ける、または裏から当たらない ・Rigidbody 付き(Kinematic でない)の物体は non-Convex の MeshCollider を使えず、薄い BoxCollider を手で並べるのが面倒 ・曲がった布や旗に、形に沿った薄い当たり判定を付けたい ・格子のフェンスで、穴を残して、棒には当たるようにしたい(結果は形状・設定しだいなので、プレビューと Play で確認します) 【特長】 ・薄い Box で覆う(既定の方式):面を法線の向き(許容角 既定5度)と平面からの距離(許容 既定1cm)でかたまりに分け、かたまりごとに最小の回転付き長方形を求めて、指定の厚み(既定2cm)の BoxCollider を置きます。曲がった旗や葉っぱは、許容角に応じて複数の板に分かれます ・厚みの置き方:両側に半分ずつ(既定) / 表側だけ / 裏側だけ ・グリッド分割:格子フェンスなど、メッシュ形状として穴が空いている形向け。長方形を一辺 N cm のマスに割り、面が載っているマスだけを Box にして、隣り合うマスは結合して個数を減らします。穴が残るかどうかは、グリッド幅・形状・通過させる物の大きさで変わるため、プレビューと Play での確認が必要です。対象はメッシュ形状の穴だけで、テクスチャの透明部分(アルファ抜き)は解析しません ・推奨厚みの計算:「想定する最大速度」を入れると、Discrete でのすり抜けを減らすための目安として、推奨厚み = 2 × 最大速度 × Fixed Timestep + 1mm を表示し、ボタンで厚みに反映できます(例: 20m/s・0.005秒 → 0.201 m、0.02秒 → 0.801 m)。現在の厚みが推奨未満なら注意を出します。結果は衝突条件で変わります ・もう1つの方式:面を両側へ押し出した、閉じた厚み付きメッシュ(.asset)を作って MeshCollider に設定します(Convex は任意) ・Box の上限個数(既定64)を超えたら、許容角を自動で緩めて再計算し、それでも超えたら警告します ・プレビュー:Scene ビューにワイヤーで Box を表示してから確定できます。結果に Box 数・面の覆い率・最大はみ出し距離を表示 ・出力設定:Layer・Physics Material・isTrigger を一括指定。Undo 対応。日本語 / English 切り替え。生成ツールは Editor 専用でビルドには入りません(生成した Collider は、ゲーム/ワールド側のオブジェクトとして使われます)。外部ライブラリの同梱なし ・サンプル付き:スクリプトで作った片面メッシュ(曲がった旗・格子フェンス・葉っぱ)と Plane / Quad、球を載せたサンプルシーン。第三者のモデル・テクスチャは入っていません 【同梱物・導入】 配布ファイルは zip で、中身は unitypackage・README_ja.txt・LICENSE.txt です。unitypackage をプロジェクトにインポートすると、Assets/ThinPlateCollider/ に入ります(Editor・Samples・README_ja.txt・LICENSE.txt)。サンプルが不要なら Samples フォルダごと削除して構いません。 【使い方】 1. Hierarchy で板のオブジェクトを選ぶ(複数可・子のメッシュも対象) 2. メニュー Tools > ThinPlateCollider > 薄い板のコライダー を開く 3. 方式・厚み・許容角などを設定する(速い物体を扱うなら、想定の最大速度を入れて推奨厚みを使う)。穴のある形はグリッド分割をオンにする 4. 「プレビュー」で Scene 上の Box を確認し、「生成(確定)」を押す。対象の子に ThinColliders ができる(既にある場合は確認のうえ置き換え) 5. 元の MeshCollider が残っている場合は、不要なら外す(残すと二重に当たります) 6. Play で実際に物を当てて、止まること・通り抜けたい穴を通ることを確認する アバターやプレハブへの自動組み込みは行いません。 【厚みと速さについて(重要)】 Unity の物理は一定の刻みでしか位置を調べないため、Discrete の物体は、薄い板を飛び越えることがあります。対策は2つです。 1. 動く側の Rigidbody を Continuous / Continuous Dynamic にする: 制作側の試験条件(後述)では、生成した Box は既定の 2cm のままで、480発すべて止まりました(0/480)。 2. Continuous を使えない場合は、Box を厚くする: 本ツールは、Discrete でのすり抜けを減らすための目安として、推奨厚み = 2 × 最大速度 × Fixed Timestep + 1mm を計算します(例: 20m/s・0.005秒 → 0.201 m、0.02秒 → 0.801 m)。球が板の中心面を越えると反対側へ押し出されるため、1ステップの移動量の2倍を見込む考え方です。 どちらも、結果は衝突条件で変わり、保証ではありません。既定の厚み 2cm + Discrete では、後述の試験で 252/480 すり抜けました。Play で実際に当てて確認してください。 【確認した結果(Unity 6・制作側の自動テスト)】 ・EditMode テストがすべて合格、コンパイルエラー0・警告0。新しい空のプロジェクトへ導入してコンパイルエラー0・警告0、メニューとウィンドウの型があることも確認 ・すり抜け試験(半径 1cm・5cm の球を 10・20・30 m/s で撃つ。Fixed Timestep 0.02秒・0.005秒。角度 0°・45°。表・裏。タイミングを10通りに変え、全体で480発。数字はすり抜けた回数): 元の片面 MeshCollider のみ + 球を Continuous / Continuous Dynamic = 表 0/120・裏 120/120(裏からは全部すり抜け) 生成した Box 厚み 2cm(既定) + 球 Discrete = 252/480 生成した Box 厚み 2cm(既定) + 球 Continuous = 0/480 生成した Box 厚み 2cm(既定) + 球 Continuous Dynamic = 0/480 生成した Box 推奨厚み(10m/s・0.02秒なら 0.401 m など、条件ごとに計算) + 球 Discrete = 0/480 いずれも上記の試験条件での結果です。他の板・形状・物体では変わります ・格子フェンス(グリッド分割 4cm・厚み 4cm・Fixed Timestep 0.002秒・穴の幅は棒より広い): 穴の中央へ撃った球は表・裏とも 10/10 通り抜け、棒の中央へ撃った球は表・裏とも 10/10 止まりました。グリッド分割なしでは穴も塞がります。これはこの格子・この条件での結果で、他の形状・グリッド幅・通過物の大きさでは変わります ・曲がった旗(1,920 三角形・許容角5度): Box 13個。1万三角形のメッシュで、Box の生成は約0.13秒 ・元のメッシュ・Transform・コンポーネント・アセットファイルが変わらないこと、再生成しても ThinColliders が二重にならないこと、Undo で生成前に戻ること ・面0・退化三角形・負のスケール・非一様スケール・Read/Write 無効のメッシュで例外が出ないこと 上はすべて、同梱サンプルと検証用に作った合成メッシュでの値です。実際の素材・実プロジェクトでの確認は、制作側では行っていません。「最大はみ出し」は、面の上の点が Box の外に出ている距離の最大値で、Box が輪郭の外へ張り出す量ではありません。 【制限・注意(必ずお読みください)】 ・動作確認は Windows / Unity 6 のみです。Unity 2022.3 LTS は未確認です(2022.3 でも動くように書いていますが、実機では確認していません)。URP / HDRP も未確認です(描画には依存しない作りです) ・ウィンドウの見た目・Scene のワイヤー表示・確認ダイアログは、制作側では手で触っての確認をしていません ・Convex をオンにした厚み付きメッシュは、Unity 側の 255 面制限に任せています(警告表示のみ)。実際に球が止まるかの接触は確認していません ・非一様スケールの親の下に置いた、傾いた Box は近似になります(警告が出ます。軸に沿った板は正確です) ・面が互いに離れて同一平面上にあるとき、辺でつながっていなければ別々の Box になります ・グリッド分割の穴の保持は、形状・グリッド幅・通過物の大きさに依存します。テクスチャの透明部分は解析しません ・VRChat SDK を導入したプロジェクト、ワールドのビルド・アップロード、VRChat 内でのプレイヤーとの衝突は未確認です(VRChat 向けの動作を保証するものではありません) ・Unity 6 の non-Convex MeshCollider は、制作側の環境では裏側から来た物体を止めませんでした(Box にはこの問題がありません)。お使いのバージョンでの挙動は、Play で確認してください ・できないこと:テクスチャの透明部分に合わせた当たり判定、閉じた立体の凸分割、SkinnedMesh の変形への実行時追従、ランタイムでの生成、布のシミュレーション、「絶対にすり抜けない」ことの保証 ・元のオブジェクトは変更しませんが、作業前にプロジェクトのバックアップをおすすめします 【ライセンス】 購入者は、本ツールを自分の作品(ゲーム・ワールド・アプリ等)の制作に自由にお使いいただけます(商用利用も可)。本アセット(ツール本体・ソースコード・サンプル)の再配布・転売・譲渡は禁止です。当たり判定を作る元のモデルの扱いは、元の配布元の規約に従ってください。詳細は同梱の LICENSE.txt を参照してください。Unity は Unity Technologies の商標または登録商標です。





