ドナドナされるプログラマのメモ

Windows用アプリのプログラミングメモ

Unityで設定項目をまとめる方法

Unityで開発を進めていると、Inspectorで設定可能な項目がだんだん増えてきてじゃまになってくる。そして、大半の設定項目は実際使用頻度が低いので普段は見えなくてもいいんだけど、たまにいじるから消したくはない。設定項目をまとめて表示・非表示できる方法は無いのかな~と思ってUnityのマニュアル眺めてたら、ありましたよ。しかも何度も見ていたWheelColliderのチュートリアルに。

Wheel Collider チュートリアル - Unity マニュアル

f:id:donadonasan:20190813092014p:plain

設定項目を開く・閉じる

これですよ、これ。この三角の開ける・閉めるマーク!これがあれば、めったに使わない設定群をグループ分けして、使わないときはコンパクトにまとめることができる。

やり方はかんたん、2ステップ。

Step 1. 設定項目をまとめたクラスをSystem.Serializable属性付きで作る。

A class representing an group of data

Step 2. 設定項目をまとめたクラスのオブジェクトをpublicメンバとして加える。

An example using the grouped data

WheelColliderのチュートリアルでは設定項目をまとめたクラスを独立させているけれど、以下のようにローカルなクラスにすることも可能。

An example using local class which groups some dat ...

この例だと、Inspectorの表示は以下のようになる。

f:id:donadonasan:20190813123532p:plain

グループを開いた状態

f:id:donadonasan:20190813123613p:plain

グループを閉じた状態

これでプロパティの整理が捗るはず。

鉄道車両の車輪をCapsleColliderで模擬してみる(カーブ通過編)

ふと、踏面だけでカーブを通過できるか試したくなってきたのでやってみた。

結果:いける。

課題:上下動がやはり目立つ。おそらく、カーブレールのポリゴンが原因。直線の組み合わせでできているため、理想の曲線から内外にはみ出る箇所があり、その結果CapsleColliderの球面に当たる場所が変わり上下動している。

課題の対策:サスペンションをつけるか、CapsleColliderを諦める。

対策どうしようかなあ。今、レールの継ぎ目を通過する音を、車輪の上下方向加速度をトリガーに鳴らしているんだけど、これとポリゴン起因の上下動を区別できないっぽいのよね。CapsleColliderによるカーブを諦めるのが最適解か?

鉄道車両のフランジをカプセルColliderで模擬してみる(確定編)

CapsuleColliderを使う実装、スプリングやら何やらを試してみたけれども結局動きがなめらかにならず。そこでもう一度WheelColliderを使ってみたら、うまく行った。どうやら、前回はサスペンションを含む向きの設定を間違えていたぽい。ただ、こんどは上下動がひどくなった。車輪の転がりもWheelColliderにしてしまおうかな。

鉄道車両のフランジをカプセルColliderで模擬してみる(特性調査編)

無事カーブレールを走れるようになったので、CapsuleColliderの設定値とカーブ走行の様子の関係を調べてみた。

  • CapsuleColliderの横方向位置:レールとの距離が近いほど、カーブで引っかかりやすくなり脱線する。レールとの距離が遠いほど安定はするが、見た目脱線する。
  • CapsuleColliderの直径:円筒側面とレールとの距離を一定に保つ限りは、直径自身にはカーブ通過性能との直接の関係はなさそう。ただし、大きくするとCapsuleとレール底面Meshが当たってしまい不安定になるため、小さい方が良いように見える。
  • CapsuleColliderの高さ:高すぎるとレール底面Meshにあたり、低すぎると車輪が跳ねたときに当たり判定がなくなって脱線する。底面Meshに当たらない程度に高くすべし。

鉄道車両のフランジをカプセルColliderで模擬してみる(手探り編)

フランジの実装方法は、少なくとも2種類ある。WheelColliderを使う方法と、CapsuleColliderを使う方法だ。今回は、ガイドローラー的なものをつくりたいので、まずはWheelColliderを使ってみた。

いきなり困ったのが、WheelColliderの向き。車輪なので当たり前かもしれないが、地面に垂直な向きしか設定できなくて困った。でもこれは、Rigidbodyを追加したらTransformの向きが反映されるようになって地面に水平な向きにもできるようになり、解決。

しかし。レールと当たり判定が生じない。なぜだ。

2時間ほどいじってみるも、解決しないのでCasuleColliderを使うことにした。今後ポイント(分岐器)とかも追加することを考慮し、カプセルの直径はフランジと同じにした。また、高さはフランジ高さよりすこし大きくし、段差等で車輪が跳ねても脱輪しないようにした。また、擦れたときに摩擦力で台車が暴れたので、CapsleColliderにPhisic Materialを追加し摩擦0とした。結果は下記動画の通り。

無事曲がれたよ!でも、まだぎごちないのでスプリング等を追加する予定。

鉄道車両の車輪をカプセルColliderで模擬してみる(これでいいや編)

カプセルColliderの設定、そういえば円筒の直径と実際の車輪直径が10mmしか違わないことを思い出した。ポイントまたぐ際にこの程度持ち上がるのは許容してしまおう。というわけで、踏面のシミュレーションはカプセルColliderで決定。次はフランジの実装だ。

鉄道車両の車輪をカプセルColliderで模擬してみる(スピードアップ編)

動力車で車輪を回すのに、Capsule ColliderとHinge Jointをつかっているんだけど、なぜかHinge JointのMotorに設定したTarget Velocityを大きくしても最大速度が上がらない。

f:id:donadonasan:20190810135826p:plain

車輪の設定

なんでかなーとあっちこっちの設定をみていたら、プロジェクトの設定に「デフォルト最大角速度」なんてのがあって、それが7に設定されていた。

f:id:donadonasan:20190810140017p:plain

プロジェクトの設定>物理シミュレーション

これを70にしたら、一気に速度UP!ただ、ここの数値はあまりいじりたくないなあ。「デフォルト」と言っているので、おそらく個別に設定できるのだろうけど。

・・・なんと。スクリプトからじゃないと個別設定できないのか。設定項目はRigidbody.maxAngularVelocityでした。ちょっと設定面倒だなあ。