Unityにおける履帯風モデルの動かし方

実現したいこと

Unityにて履帯物の車両モデルを動かしたいと思っています
以下を満たせるような環境を作成したいのですが、下記の課題を解決できる方法はないでしょうか?
・実際に履帯そのものを動かす必要はなく、右履帯:1m/s、左履帯:-1m/s のような速度指令からそれらしく車体中心を移動させたい
・物理的な精度はそこまで必要ではないが、段差の乗り越えや転倒もある程度自然に行わせたい

前提

Unityにて建設機械向けのシミュレーション環境を作成しています
別で作成している制御モデルからは履帯左右の目標速度が送信されてくるため、
おおよそ※その目標速度通りに動くようなモデルを作成したいと思っています
※動き出しや終端速度が目標速度とずれていても問題なし

発生している問題・エラーメッセージ

自由落下や段差乗り越え時など目標速度が0なのに車体が移動するシチュエーションで、
期待通りの挙動にならない
期待挙動:車体に与えられる力は重力のみなので自然に落下する
実際の挙動:重力以外に車体を目標速度(=0)に近づけようとする力が加わってしまい、落下速度が極端に遅くなる

該当のソースコード

travelRightVelocity、travelRightVelocity:左右履帯の目標速度(入力値)
ChassisObj:車体モデルシャーシ部に相当するGameObject
chassisBody:ChassisObjにアタッチされたRigidbody

C#

1 targetVelocity = ( travelRightVelocity + travelLeftVelocity ) / 2 * chassisObj.transform.right;2 chassisBody.AddForce( ( targetVelocity - chassisBody.velocity) * modelMass / Time.deltaTime );

※回転成分については質問内容に関係しないので省略しています

試したこと

・履帯が地面に接触している間のみAddForceを有効にする
→段差の乗り越え時は上記現象が防げない
・重力方向には力を加えない
→車体が角度の急な坂道を上る際、目標速度と実速度が乖離する/進めない

補足情報(FW/ツールのバージョンなど)

Unity 2020.3.44f1

コメントを投稿

0 コメント