見出し画像

ゼロ戦で空中戦をしたい  追いかけて来る敵

 敵機を飛ばすにはAIのフライトシミュレーターで動かす方法がありますが無料は無いでしょう。もし手に入れても飛行ルートを指定するかランダムに飛ぶかで空中戦にはならない。
 自分が持っているフライトシミュレーターにはAIで飛ばすScriptが付いていたのでやってみましたが時速500Kは想像以上に速い、一度見失うしなうと狭い画面では何処を飛んでいるかもわからなくなる。現時点ではゲームにはならない。

 でもAIフライトシミュレーターを使わなくても敵機を飛ばす方法は他にもあるので作業を進めて行く。飛ばす又は飛んでいる様に見せるには零戦の座標を敵機に教えれば付いてくる。検索で「Unity 追いかける敵」で調べれば出てくる。ただし直線的な動きしかできない。ミサイルなら良いがこれも使い物にならない。これでは作業確認も出来ない。そこで考えたのは零戦の周りを飛ぶScript

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class RotateEnemy : MonoBehaviour
{
    // 旋回するターゲット
       public Transform target;
    // 現在の角度
    public  float angle;
    // 回転するスピード
       public float rotateSpeed = 180f;
    // ターゲットからの距離
      public Vector3 distanceFromTarget = new Vector3(10f, 10f, 10f);

        void Update()
    {

        // ユニットの位置 = ターゲットの位置 + ターゲットから見たユニットの角度 × ターゲットからの距離
        transform.position = target.position + Quaternion.Euler(0f, angle, 0f) * distanceFromTarget;
        // ユニット自身の角度 = ターゲットから見たユニットの方向の角度を計算しそれをユニットの角度に設定する
        transform.rotation = Quaternion.LookRotation(transform.position - new Vector3(target.position.x, transform.position.y, target.position.z), Vector3.up);
        // ユニットの角度を変更
        angle += rotateSpeed * Time.deltaTime;
        // 角度を0~360度の間で繰り返す
        angle = Mathf.Repeat(angle, 360f);
    }
}

publicはInspectorから入力する数字を変える事が出来るのでScript編集ソフトを開かなくても良い。これは一定の距離を指定した数値の距離を置いて零戦の周りを周り続ける。

Grammamの数値を変えれば作業確認が出来る。映像的にはGunCameraの様に見えるが一定の距離を取って飛んでいるだけ機銃を撃てるかもわからない。次は零戦とF4Fに武装させ弾が当たるか確かめる。

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