RigidBody 玉が転がるスピード、減衰力の調整方法ということで、
玉を転がすゲームを作りながら得たノウハウを紹介!!
といっても、大した内容ではないので、あしからず(-_-メ)
まあ、一応紹介しておくと、こんなアプリを作っている
ついでに・・・
前置きが長くなったが、UnityEditorのプロジェクトのデフォルトで、玉を転がすと、Physics Materialの摩擦を0にしようが下記のような感じで、玉の流れの勢いの減衰力が自然界のもののようには全然いかず、かなりもっさりで、使えない
さらに途中で無意味に止まってしまったりもする(-_-メ)
ここで、Physics MaterialのMassをいじってみたりするが、物理学的に、重さには関係なく重力は空気抵抗がなければ万物落下速度は同じである(あってるよね??)
なので、何ら変化なし
じゃあ、今度は本当にGravity(重力)をいじってみる
勢いが強すぎて、コリジョンをすり抜けてしまう (T_T)/~~~
なので、すり抜けないようにRigidbodyのCollistion DetectionをContinuousに
すり抜けなくなったが、玉の減衰が強いのは変わらず
ということで、前置きが長くなったが、Project SettingsのTimeのFixed Timestepの値をデフォルト0.02を0.005に変更する
すると、下記のように格段に玉の勢いが増し、減衰力も減らすことができた
ただ、なんかよくわからないタイミングで、何が気に入らないのか止まってしまうことがある
そこで、PhysicsのSleep Tjresholdをデフォルトの0.005から0.001に減らしてみる
祝!! 無事なんとか、気持ちいい感じに玉が流れるようになった!!
まとめ
要は物理演算の計算の間隔を短くすると、計算の精度が上がるということらしい
ただし、CPUへの負荷が増えるため、用途に合わせて調整する必要ありとのこと
基本的な仕様について
そういえば、どうやって上記の動画のようなことを実現しているかを全く触れていなかったので、要点のみ書き残しておく
●構造物
・Blenderで作成したモデルデータ Blenderのファイル形式で読み込み
・コライダーは、Mesh Colliderを使用
・Physics Materialは、bouncinessのみ0.005
その他は0 CombineはMaximum
・Materialは、パイプのみRendering modeをTransparentにして、
albedoのA(アルファ)値を適当に下げて透かしている
●ボール
・3D Objectのsphereを使用
・Rigidbody、Sphere Colliderを使用
Mesh Collider同士の当たり判定はできないので注意が必要
・Physics Materialは、bouncinessのみ0.005 用途に合わせて要調整
その他は0 CombineはMaximum
・Prefab化して、スクリプトから制御して発射している
Instantiate(TamaPrefab, TamaSpawnPos.transform.position, TamaSpawnPos.transform.rotation);
以上、ここまで