

提示コードですが飛行機にアタッチしているスクリプトです。物理演算を用いた飛行機を飛ばしたいのですが  
この状態でスペースキーを押すと移動せず、スペースを押して十字キーを押すと提示画像のように座標がおかしくなってしまいます。これはなぜでしょうか？

##### 知りたいこと

飛行機を物理演算で飛ばすにあたり速度を与える方法として適切な実装方法が知りたい。

[![画像の説明をここに入力](https://i.stack.imgur.com/PqXf1.png)](https://i.stack.imgur.com/PqXf1.png)

参考サイト：https://sites.google.com/view/ronsu900/createfs/wing1

[code]

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Control : MonoBehaviour
    
    {
    
        // Wing area 翼面積 [m^2]
    
        public float wingArea;
    
        Rigidbody rigidBody;
    
        void Start()
        {
            rigidBody = GetComponent<Rigidbody>();
        }
    
        void Update()
        {
            Vector3 vec = new Vector3(0,0,0);
    
            //vec.z = -1;
    
            // 左に移動
            if (Input.GetKey(KeyCode.LeftArrow))
            {
                vec.x = 1.0f;
            }
            // 右に移動
            if (Input.GetKey(KeyCode.RightArrow))
            {
                vec.x = -1.0f;
    
            }
            // 前に移動
            if (Input.GetKey(KeyCode.UpArrow))
            {
                vec.y = -1.0f;
    
            }
            // 後ろに移動
            if (Input.GetKey(KeyCode.DownArrow))
            {
                vec.y = 1.0f;
            }
    
            // 前進
            if (Input.GetKey(KeyCode.Space))
            {
                vec.z = 1.0f;
            }
    
    
            rigidBody.velocity = vec;
        }
    
    
        void FixedUpdate()
        {
    
    
    
    
            // Convert to local vector ローカルなベクトルに変換
    
            Vector3 localVelocity = this.transform.InverseTransformVector(rigidBody.velocity);
    
    
    
            // Speed 速度
    
            float v = rigidBody.velocity.magnitude;
    
    
    
            // Get Angle-of-attack(pitch) from local vector ローカルなベクトルから迎角(ピッチ角)を計算
    
            float aoa = -Mathf.Atan2(localVelocity.y, localVelocity.z) * Mathf.Rad2Deg;
    
    
    
            //------------------------
    
            //　▼ 揚力
    
            //------------------------
    
    
    
            // Lift coefficient 揚力係数（簡易版）
    
            float cl = aoa * 0.1f;
    
    
    
            // Calculate lift 揚力を計算
    
            float lift = CalculateLiftOrDrag(cl, wingArea, v);
    
    
    
            // Calculate lift direction (normalized) vector 揚力ベクトルを計算
    
            Vector3 liftVector = Vector3.Cross(Vector3.Cross(rigidBody.velocity, this.transform.up), rigidBody.velocity).normalized;
    
    
    
            // Apply lift 揚力を適用
    
            rigidBody.AddForce(liftVector * lift);
    
    
    
            //------------------------
    
            //　▼ 抗力
    
            //------------------------
    
    
    
            // Drag coefficient 抗力係数（簡易版）
    
            float cd = Mathf.Clamp01(0.005f + Mathf.Pow(Mathf.Abs(aoa) * 0.0315f, 5));
    
    
    
            // Calculate drag 抗力を計算
    
            float drag = CalculateLiftOrDrag(cd, wingArea, v);
    
    
    
            // Calculate drag direction (normalized) vector 抗力ベクトルを計算
    
            Vector3 dragVector = -rigidBody.velocity.normalized; //ベロシティの逆ベクトルを正規化するだけ
    
    
    
            //------------------------
    
            //　▼ 力を適用
    
            //------------------------
    
    
    
            // Apply drag 揚力を適用
    
            rigidBody.AddForce(dragVector * drag);
    
        }
    
    
    
    
    
        // 揚力・抗力を計算する共通メソッド
    
        public static float CalculateLiftOrDrag(float coefficient, float surface, float velocity, float airDensity = 1.293f)
    
        {
    
            float q = 0.5f * (velocity * velocity) * airDensity;    //動圧
    
            return q * surface * coefficient;
    
        }
    
    }
    
[/code]


CC BY-SA 4.0
2022-11-05T05:13:22.183
92008
2022-11-05T05:40:56.133
55177
question
c++
Unityエンジン　飛行機を物理演算を使って飛ばすにあたり適切な速度の与え方が知りたい。


##### 解決方法

コリジョンの位置に問題がありました。  
自分は面倒なので真下に適当な四角いコリジョンを用意していただけなのですが車輪の部分前一つ、後ろ二つにカプセルを置いて実行したら位置がおかしくなりませんでした。


CC BY-SA 4.0
2022-11-05T05:40:56.133
92010
2022-11-05T05:40:56.133
55177
92008
answer