moao blog

生活記録

Unityで歯車回しアニメ。Mesh coliderに苦戦の巻

散々苦労しましたが、Unityでうまく回らなかった歯車について述べていきます。

はじめに以下参考に歯車どうしの回転を試しましたが、うまくいきません。

physics materialで歯車を回す - Qiita

Mesh coliderとrigidbody追加していますが、すり抜けます。

調べていたら、そもそもmesh colider事態がconvexを有効にしないと 衝突判定されないということ。しかしconvexは三角形が255までしか対応していないので、作成した歯車では悲しいことに255超えていてうまくいきません。

【Unity】アニメーションと物理演算を連動させる 5.6以降 - テラシュールブログ

Unityで物理演算をやってみよう【初心者向け】 | ゲームの作り方!

ならばと調べると大体手段があるようでした。

UnityでMeshColliderを付けたオブジェクトがすり... - Yahoo!知恵袋

以下試しましたが。。へんな位置に変なオブジェクト配置されるだけ。。

https://github.com/sanukin39/UniColliderInterpolator

以下はboxのcoliderが良い感じに配置されますが、 粒度荒く歯車どうしがかみ合いません。カタカタいってます。

https://gist.github.com/rubbyzhang/96f99863d4a49d57fd1f953a3f29ceeb

逆転の発想で6個のギアにしてもconvexで足らず。 edgeの数を減らすためにblenderのモディファイア使っても255超えてしまいます。

Analysis -> Physical Viewer ->右下のcoliderをチェックでcoliderの形が確認可能 coliderが適用されているかいないかも確認可能で助かる。

もうどうしろと。。

box coliderを逐一配置するか。。少ないギアだと可能なはず。

いや、blenderで歯車の歯と中で分離させて、歯にあたり判定を与える方式をとるか。

スクリプトで自動で一括設定できるスクリプト開発もしよう。。

と思いましたが歯車をbox coliderに置き換えるスクリプト試したら一応回りました。 が、貫通してますね。。

これだとblenderで回転数回すほうがよっぽとしっくりきてました。

youtu.be

あとがき

というわけで、大変だったunityの歯車回しです。 歯車のゲーム作ろうと思ってたのにこんな苦労するとはです。

物理計算するのではなく、おとなしくギア比から書いてく速度変えてしっくりくるようにすべきという知見が得られたわけでした。