75168


提示子コードですが回転と移動の二つのが実装途中です。RigidbodyでAddforce等の物理演算を使って飛行機を飛ばす為の処理を書きたいのですがうまく飛行してくれません。どうすればまともな飛行が実装できるのでしょうか？色々試しましたがどうしてもわかりません。

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

[code]

        using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class PlayerController : MonoBehaviour
    {
        Rigidbody rb;
        float speed = 0;
        Vector3 moveVec;
        Vector3 angleVec;   //ヨーピッチロール
        Vector3 pitchVec;   //ピッチ
    
    
        // Start is called before the first frame update
        void Start()
        {
            rb = GetComponent<Rigidbody>();
            moveVec = new Vector3(0,0,0);
            angleVec = new Vector3(0,0,0);
    
        }
    
        // Update is called once per frame
        void Update()
        {
            if(Input.GetKey(KeyCode.W))
            {
                speed += 10;
            }
            else if (Input.GetKey(KeyCode.S))
            {
                speed += -10;
    
            }
    
            if(Input.GetKey(KeyCode.UpArrow))
            {
                angleVec.x = 1;
                moveVec.x += 10;
            }
            else if (Input.GetKey(KeyCode.DownArrow))
            {
                angleVec.x = -1;
                moveVec.x += -10;
    
            }
            else
            {
                angleVec.x = 0;
            }
    
    
    
    
            if (Input.GetKey(KeyCode.LeftArrow))
            {
                //angleVec.y += Mathf.PI / 360;
                angleVec.y = -1;
            }
            else if (Input.GetKey(KeyCode.RightArrow))
            {
                //angleVec.y += -Mathf.PI / 360;
                angleVec.y = 1;
            }
            else
            {
                angleVec.y = 0;
            }
    
    
        }
    
    
        void FixedUpdate()
        {
    
    
      //      Quaternion AddRot = Quaternion.identity;
    
    //        AddRot.eulerAngles = new Vector3(0, 0, angleVec.z);
            rb.rotation *= Quaternion.Euler(angleVec.x, angleVec.y, 0);
    
            rb.AddForce(transform.up * moveVec.x);
    
            if (rb.velocity.z < 50)
            {
                rb.AddForce(transform.forward * speed);
            }
    
            //Debug.Log(rb.velocity.z);
    
    
        }
    
    }
    
[/code]


CC BY-SA 4.0
2021-04-08T07:29:48.000
75162
2021-04-08T11:51:55.220
2021-04-08T11:13:03.777
question
c# unity3d
「Unity」飛行機を飛ばす移動処理の書き方が知りたい。


Unity公式が公開している「Standard Assets」を参考にしましょう  
<https://assetstore.unity.com/packages/essentials/asset-packs/standard-assets-
for-unity-2018-4-32351?locale=ja-JP>

新規プロジェクトを作り、  
Window > Asset Store で「Standard Assets 2018」と検索をかけるとヒットするので、importします。

Assets/SampleScenes/Scenes  
に、飛行機や車のサンプルがあります。  
AeroplaneUserControl2AxisにFixedUpdateがあり、実際の計算等は  
AeroplaneController.Moveの中で行われています。  
速度足らずや過剰な迎角によるストールは再現されていませんが、それ以外はそれらしく動いていると思います。


CC BY-SA 4.0
2021-04-08T11:51:55.220
75168
2021-04-08T11:51:55.220
25396
75162
answer