Unityでアニメーションにコライダーが追従せずズレる時の対処法メモ。VRoidモデルの場合

unity アニメーション コライダー ズレる Unity
※記事内に広告が含まれています。

バーチャル3Dクリエイター神部まゆみです(*^_^*)

この記事はUnityでアニメーションにコライダーが追従せずズレる時の対処法メモです。

似たような現象では、アニメーションプレビュー中にキャラの位置がズレる問題については↓の記事を参照。

動作確認した最新バージョンは Unity 6000.0.32 です。

●PRスペース●
■PR■

現在人気商品が最大90%以上オフで買えるAmazonプライム感謝祭先行セールをやってるみたいです(2025/10/10 23:59まで )。

Amazonプライム感謝祭 先行セール開催中 最大90%以上オフ

燃えにくく安全性の高いエレコム ナトリウムイオンモバイルバッテリーがかなり安くなっているので私も買いました。

エレコム ナトリウムイオン モバイルバッテリー

品薄だからか配送まで一ヶ月くらいかかるみたいですが、そろそろモバイルバッテリーが消耗している人におススメです。

エレコム モバイルバッテリー 9000mAh 45W 【世界初】ナトリウムイオン電池 USB PD対応

〇まゆみマート|BOOTH

BOOTHでVRoidテクスチャやVRChat向けオブジェクトなどを販売しています。いいねしてくれると励みになります(*^-^*)

症状:モデルのアニメーション中にコライダーが初期位置のまま動かない

↓こんな感じにメッシュコライダーを設定したんだけど、

unity アニメーション コライダー ズレる

↓のように、実行中にシーンを見るとコライダーが初期位置のまま置きざりになっていることに気づいた。

unity アニメーション コライダー ズレる

↓ObiFluidをいじっていて気づいたのだけど、ObiFluidはコライダーを元に当たり判定をするので、これだとダメですね…。

対処法1:シェイプキーで動かしてる場合はトランスフォームで動かす

これは以前なったことあるけど、もしシェイプキーで動かしている場合はメッシュが動いているだけなのでコライダーは動かない。

VRChatワールドを作っている時に、ドアを開けるシェイプキーを作ったらすり抜けたことがあったので、結局トランスフォームで動かした。

しかし今回の場合はこれには当てはまらないですね…トランスフォームはちゃんと動いています。

「ルートモーションを適用」は今回は関係ないかな?

よくあるのが「ルートモーションを適用」にチェックを入れてないってことだけど、普通にチェック入れてある。

unity アニメーション コライダー ズレる

この場合はアニメーションで動かした場合にルートが適用されなくなるって話なので、今回の話では関係ないですね。

対処法2:ボーンのあるオブジェクトにコライダーを設定する

よくよく考えてみたら、コライダーを設定したFace Hair BodyはただのメッシュでボーンがなかったΣ(゚Д゚)

アニメーションはRootから始まるボーンで動かしているので、少なくともRoot以下にコライダーを設定しないとピクリともしません。

unity アニメーション コライダー ズレる

FaceとHairはHeadにメッシュコライダーを設定すればいけるかと思ったけど…

メッシュコライダーって位置調整ができないため、Rootの子に設置すると位置がおかしくなるっぽい?Headに設定したら遥か上空にメッシュコライダーがありますΣ(゚Д゚)

unity アニメーション コライダー ズレる

これたぶん、Root~HeadまでのボーンのTransform位置が0,0,0になっていないので、そのぶんの総和が累積してズレてるのかな?

unity アニメーション コライダー ズレる
unity アニメーション コライダー ズレる

メッシュコライダーはダメっぽいから、スフィアコライダーを細かく配置して位置調整していくしかないかなぁ。

細かくスフィアコライダーを設置したら良い感じになった

とりあえずHips~Headにスフィアコライダーを入れてみたらちゃんと追従しました。

unity アニメーション コライダー ズレる

まぁしかしめんどくさいけどw

ざっくりコライダーがあればいいだけなら、Rootにカプセルコライダー一つだけでもいいが…

これゲームのダメージ当たり判定とかで、「だいたいこの範囲に当たったらダメージ」でいいならRootにカプセルコライダー一つだけでもあまり問題ないと思います。

しかしパンチやキックを実装する場合とか、部位ダメージを実装する場合などは細かくボーンごとにコライダーを設定する必要がありますね。

以前やったけど↓みたいな感じになる。

VRoidモデルはボーン構造がほぼ同じなので、一度設定したコライダーの情報を保存して、次やる時はスクリプトで自動でいけるかも?

これ毎回モデルごとに設定するのめんどくさいと思うので、VRoidなどボーン構造や体型が同じようなモデルを使いまわす場合は、一つだけ作りこんでスクリプトで自動で設定してくれるようにできそう。

まぁせいぜいスフィアコライダーの半径や位置くらいかな、それらをプロンプトで指定してChatGPTに投げればコード書いてくれそうな気がする。

↓なんとなく聞いたら「できますよ、余裕っすよw」みたいなノリで回答してくれたため(笑)、たぶんできるんだろうと思います。

しかしChatGPTパイセンはどんどん馴れ馴れしくなっていくなあ(^_^;)こちらは毎回敬語で接しているのにちょいちょいタメ口をはさんでくるw

unity アニメーション コライダー ズレる
unity アニメーション コライダー ズレる

以前やったScriptableObjectとかいうやつで保存できるっぽい。

まぁ後でやれたら記事にしてコードを載せておこうかな。

私はおおむねVRoidのデフォルト体型に近いと思うので(胸以外w)、設定を引き継げばたぶん体型が同じようなモデルにはそのまま設定できるような気がする。

おわりに

案外すぐ解決して良かった。

しかしモデルごとに設定するのはめんどくさいので、後ですぐ設定できるようにしておいたほうがいいかな。

また何かあれば追記します(*^_^*)

タイトルとURLをコピーしました