見出し画像

ゼロ戦で空中戦をしたい 零戦21型の性能を再現する

 フライトシミュレーターのプロパティへの入力が正しいかどうかわからないので確認するために数値が見えるようにしてみた。零戦21型の最高時速は高度5700mで533.4K、この数値になるようにエンジンを調整する。最高速度で止まった。ぶれが少し出るがほぼ成功した。どこを調整するかわからなければScriptを見る。Scriptは英語の単語の中に数式を入れPCに教えているので書いてある。


微妙な操縦は練習不足
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ZeroVelocity : MonoBehaviour
{
    public GameObject textObject;

    public GameObject plane;
    Rigidbody rb;

    void Awake()
    {
        rb = plane.GetComponent<Rigidbody>();
    }

    void Update()
    {
        //Textオブジェクトからコンポーネントを取得する
        Text textObject_text = textObject.GetComponent<Text>();

        //sphereオブジェクトから速さ(速度の大きさ)を取得する
        float vel = rb.velocity.magnitude;
        //float型を文字列に変更する
        string vel_String = vel.ToString();
        //表示する内容を指定する
        textObject_text.text = "Speed" + vel_String;

    }
}

上のScriptが速度表示する。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Hight11 : MonoBehaviour
{
    public Text text;
    private Vector3 pos;

   
    void Update()
    {
        pos = transform.position;
        
        text.text = pos.y.ToString("0.00m");
    }
}

高度を表示するScript、InspectorのY位置を取得して画面に表示する。

数値は初期のまま

 ゲームで物理の法則を使用するにはRigidbodyが必要となる。Rigidbodyは重さと抵抗を与える物で単位は㎏、抵抗は地上なら気にしない。水中を落下させたければ数値を上げる。Gravityは重力でチェックを入れると重力が発生する。航空機は空中で止まれないので入れる。エンジンを絞りすぎると落下するし高度を維持しないと降下する。プロペラ機はプロペラを止めても高度の約3倍の長さの距離を飛ぶと言う実験を行った結果は実際に約3倍の距離を飛んだ。

 UDは上下の角度を表示させた。零戦21型の高度6000mまでの到達時間は7分27秒なので確認する。飛行角度で到達時間が変わるが約12度前後で近い数値になる。ゼロ戦を動かすのがマウスの移動量でコントロールしているので角度を維持するのが困難なので正確ではない。
 角度を変えて上昇している時に宙返りはできるのかと思い実験してみた。戦闘機なら宙返りが出来なければフライトシミュレーターの数値も意味がない。今までにプレイした戦闘機のゲームでは宙返りができなかったので行う。結果は宙返りができる。落下速度は加算されない。

 RLは旋回角度を出そうと思い作ってみたが旋回を意識して飛行させるのはストレスが大きいので取り止めにした。単座の戦闘機が夜間計器飛行で1時間も飛ぶと立って歩けなくなると言う位難しい。最大バンクの値を指定して対応することにした。これが正解とは言わない。使っているフライトシミュレーターに旋回率を設定する項目がないのでここは敵戦闘機を同じ計算式で飛ばせば比較できるだろうと思う。画面の中で航空機を飛ばすのはどのゲームでもストレスが起こる。これが最大の問題だと思う。


夢は100万の大軍を動かすゲームを作ることです。それまでには時間がかかりますが応援お願いします!