実現したいこと
UEC++でAddTorqueを用いてプレイヤーの制御を試みています。
Aキーでワールド基準の左に回転
Dキーでワールド基準の右に回転
Wキーでローカル基準の上に回転
Sキーでローカル基準の下に回転させています。
この時、Roll軸(X)を0に固定したいです。
発生している問題・分からないこと
左右方向の回転と上下方向の回転を同時に行うと、回転Xが変化してしまう
該当のソースコード
C++
1rigidBody = Cast<UPrimitiveComponent>(RootComponent); 2 3if (isTurnLeft) rigidBody->AddTorqueInDegrees(FVector::DownVector * turnSpeed * FMath::Pow(float(SPEED_SCALE), 2)); 4if (isTurnRight) rigidBody->AddTorqueInDegrees(FVector::UpVector * turnSpeed * FMath::Pow(float(SPEED_SCALE), 2)); 5if (isUp) rigidBody->AddTorqueInDegrees(-GetActorRightVector() * ((downSpeed * FMath::Pow(float(SPEED_SCALE), 2)) * DOWN_TURN_SCALE)); 6if (isDown) rigidBody->AddTorqueInDegrees(GetActorRightVector() * ((downSpeed * FMath::Pow(float(SPEED_SCALE), 2)) * DOWN_TURN_SCALE));
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
・PhysicsのConstraint設定で回転Xをロック
・PhysicsConstraintsComponentでTwist方向の回転をロック
・与えるベクトルを変数に加算していき、X成分を0にしてからAddTorque
・AddTorqueの前で角速度を取得し、X成分を0にする
・AddTorqueの前後でSetActorRotationを用いて強制0上書き
いずれも、Xを0に固定できなかった
直接Rollにトルクを与えると動かないのに、複数トルクの合成による慣性だと動いてしまう?
AddTorqueを使ってロール軸を水平にしたいでおなじようなことを実現しようとしているが、解決できなかった。(この記事で実現しようとしている「AddTorqueによる復元力の実装」まで至らなくとも、0で固定さえできれば良い)
補足
バージョンはUE5.5です。

あなたの回答
tips
プレビュー