こちらの質問を参考に機体を動かすときにトルクをつけたのですが
左・右キーを押す前に上・下キーを押すと機体が回転してします。
左・右キーを押すとなおるのはなんでなんでしょうか?
GIF画像が重すぎてアップロードできなかったのでGoogleDriveにアップロードしました。リンクはこちらです
コード自体全てを理解できているわけではないですが
下の行が影響しているようです
C#
1// プレイヤーの入力に応じて姿勢をひねろうとするトルク 2Vector3 rotationTorque = new Vector3(-y * pitchTorqueMagnitude, x * yawTorqueMagnitude, -x * rollTorqueMagnitude);
以下ソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Player : MonoBehaviour 6{ 7 public float moveSpeed = 80.0f; 8 public float moveForceMultiplier = 0.4f; 9 10 // 水平移動時に機首を左右に向けるトルク 11 private float yawTorqueMagnitude = 25.0f; 12 13 // 垂直移動時に機首を上下に向けるトルク 14 private float pitchTorqueMagnitude = 60.0f; 15 16 // 水平移動時に機体を左右に傾けるトルク 17 private float rollTorqueMagnitude = 50.0f; 18 19 // バネのように姿勢を元に戻すトルク 20 private float restoringTorqueMagnitude = 100.0f; 21 22 private Rigidbody rigidbody; 23 24 void Awake() 25 { 26 rigidbody = GetComponent<Rigidbody>(); 27 // バネ復元力でゆらゆら揺れ続けるのを防ぐため、angularDragを大きめにしておく 28 rigidbody.angularDrag = 10.0f; 29 } 30 31 void FixedUpdate() 32 { 33 float x = Input.GetAxis("Horizontal"); 34 float y = Input.GetAxis("Vertical"); 35 // xとyにspeedを掛ける 36 rigidbody.AddForce(x * moveSpeed, y * moveSpeed, 0); 37 38 rigidbody.AddForce(moveForceMultiplier * (Vector3.zero - rigidbody.velocity)); 39 40 // プレイヤーの入力に応じて姿勢をひねろうとするトルク 41 Vector3 rotationTorque = new Vector3(-y * pitchTorqueMagnitude, x * yawTorqueMagnitude, -x * rollTorqueMagnitude); 42 43 //現在の姿勢のずれに比例した大きさで逆方向にひねろうとするトルク 44 Vector3 right = transform.right; 45 Vector3 up = transform.up; 46 Vector3 forward = transform.forward; 47 Vector3 restoringTorque = new Vector3(forward.y - up.z, right.z - forward.x, up.x - right.y) * restoringTorqueMagnitude; 48 49 // 機体にトルクを加える 50 rigidbody.AddTorque(rotationTorque + restoringTorque); 51 } 52 53}
環境
OS:MacOS Catalina 10.15.3
Unityのバージョンは2018.4.19f1です
追記
- スクリプトは提示した物で全てです
- CubeとCapsuleで試してみたところ、どちらも正常通りでした
- 飛行機はこちらのアセットを使用しています
奇妙な症状ですね...
のちほど調べてみようと思いますが、参考情報としていくつかおうかがいしたいです。
・このスクリプト以外にRigidbodyまたはTransformに対して何か操作を行っているスクリプトはあるでしょうか?もしありましたら、そちらのコードもご提示願います。
・このスクリプトとRigidbodyのインスペクターの様子をご提示いただけるでしょうか。その際、念のためRigidbodyの「Info」の内容も見えるように撮影願います。InfoにはVector3型の項目もありますので、インスペクターの横幅が狭いと値が見切れてしまうかもしれません。必要に応じて横幅を広げていただけるとありがたいです。
・このスクリプトをこの飛行機以外で使用しても同じ現象が起きるでしょうか?たとえばCubeやCapsuleにRigidbodyとこのスクリプトを付けた場合でも、同様に初期位置から上下に動かすとクルクル回ってしまうでしょうか。
回答1件
あなたの回答
tips
プレビュー