1.

Unity Standard Assets の Aircraft(航空機)プレハブと現代の代替アセット

編集
この記事の要点
  • Aircraft (航空機) はかつて Unity の Standard Assets / Vehicles に含まれていた航空機サンプル
  • 機能: キーボード操作 (ピッチ / ヨー / ロール / スロットル)、揚力 / 抗力モデル、ジェット音 SE、コックピット視点
  • Standard Assets は Unity 2019.3 で公式リポジトリから削除、現在はAsset Store のフリー / 有料代替を使う
  • おすすめ代替: Vehicle Physics Pro / Aircraft Physics / SimplePlanePhysics
  • 自前で実装するなら Rigidbody + ForceAtPosition で揚力ベクトルを与え、Lift = ½ ρ v² S CL の式で近似

Aircraft プレハブとは

Unity の Standard Assets という公式サンプル集には、Vehicles カテゴリの中に Aircraft(航空機)のサンプルが含まれていました。具体的には以下のフォルダ構造で提供されていました。

Standard Assets/
├─ Vehicles/
│  ├─ Aircraft/
│  │  ├─ Prefabs/
│  │  │  └─ AircraftJet.prefab
│  │  ├─ Scripts/
│  │  │  ├─ AeroplaneController.cs
│  │  │  ├─ AeroplaneAudio.cs
│  │  │  └─ AeroplaneUserControl4Axis.cs
│  │  ├─ Models/
│  │  └─ Sounds/
│  └─ Car/
└─ ...

このプレハブは Rigidbody ベースのジェット機モデルで、キーボードで操縦できる小規模なサンプルゲームとして付属していました。

Aircraft の機能

機能挙動 / 実装
4 軸操作Pitch(前後傾き)/ Yaw(旋回)/ Roll(左右傾き)/ Throttle(スロットル)
揚力モデル速度に応じた揚力ベクトルを Rigidbody.AddForce で印加
抗力 (Drag)速度の二乗に比例する空気抵抗
失速 (Stall)低速+高仰角で揚力激減
オーディオエンジン音のピッチ / 音量をスロットル / 速度で変調
カメラSmoothFollow / FreeLookCam で機体追従

Standard Assets 廃止の経緯

Unity Technologies は2019 年 3 月の Unity 2019.3 以降、Standard Assets を公式エンジン同梱から外しました。

  • 長年メンテナンスされず、新しい URP / HDRP に対応していなかった
  • サンプルとしての役目は Unity Learn や Asset Store の公式パッケージへ移行
  • 2021 年以降の Asset Store からも Standard Assets パッケージは削除済み

古いプロジェクトをアップグレードする際に NamespaceConflict / missing reference が大量発生する原因にもなっていたため、撤去は妥当な判断と言えます。

現代の代替手段

1. Vehicle Physics Pro (有料)

地上車両がメインですが、Aerodynamics 機能で航空機・ヘリも扱えます。CarX 系のリアルな物理が必要なときに。

2. Aircraft Physics (Asset Store)

翼面 / 舵面 / エンジンを Component として配置する設計で、リアリスティックな飛行モデルを比較的手軽に組めます。フライトシミュレータ寄り。

3. SimplePlanePhysics / Arcade Flying

アーケード寄りで、ゲーム的な軽快な操縦感を求める場合に。揚力をシンプルに「速度に比例して上向き」とだけ計算するなど割り切った実装が多いです。

4. 公式 Visual Effect / Sample プロジェクト

Unity 公式の Karting MicrogameTanks! サンプルが Vehicles 代替の学習用として配布されています。航空機専用のサンプルは現状ありませんが、構造の参考になります。

自前で実装する場合の最小コード

using UnityEngine;

[RequireComponent(typeof(Rigidbody))]
public class SimpleAircraft : MonoBehaviour
{
    [Header("Engine")]
    public float maxThrust = 5000f;
    public float throttle;

    [Header("Aerodynamics")]
    public float liftCoefficient = 0.5f;
    public float dragCoefficient = 0.05f;
    public float wingArea = 16f;
    public float airDensity = 1.225f;

    [Header("Control")]
    public float pitchTorque = 200f;
    public float rollTorque  = 200f;
    public float yawTorque   = 100f;

    Rigidbody rb;

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

    void Update()
    {
        throttle = Mathf.Clamp01(throttle + Input.GetAxis("Vertical") * Time.deltaTime);
    }

    void FixedUpdate()
    {
        // 1. 推力(機首方向)
        rb.AddForce(transform.forward * maxThrust * throttle);

        // 2. 揚力(速度に比例する成分を上向きに)
        float speed = rb.linearVelocity.magnitude;
        float lift  = 0.5f * airDensity * speed * speed * wingArea * liftCoefficient;
        rb.AddForce(transform.up * lift);

        // 3. 抗力(速度反対方向)
        Vector3 drag = -rb.linearVelocity.normalized * (0.5f * airDensity * speed * speed * wingArea * dragCoefficient);
        rb.AddForce(drag);

        // 4. 操作トルク
        float pitch = -Input.GetAxis("Mouse Y");
        float roll  = -Input.GetAxis("Horizontal");
        float yaw   =  Input.GetAxis("Mouse X");
        rb.AddRelativeTorque(new Vector3(pitch * pitchTorque, yaw * yawTorque, roll * rollTorque));
    }
}

上記はリアル志向ではなくゲーム的な近似ですが、出発点としては機能します。失速や横滑り、誘導抵抗まで再現するならアセットを使うか、Aerospace 系の論文を参照してください。

Wheel Collider と着陸装置

航空機の着陸装置は車と同じく Wheel Collider で組めます。ジェット機の主脚 2 + 前脚 1 / 後脚 1 の構成にすると、滑走路の上を転がる動作・着陸時のバウンドも自然になります。

マルチプレイ対応

  • Mirror / Netcode for GameObjects で位置同期
  • Rigidbody の 動きを Authority 側だけが計算 → 他クライアントには補間するのが基本
  • レイテンシ補償のためクライアント側予測サーバ側照合の二重実装が必要
  • フライトシム系は地形がデカいので、World Streaming も併用

FAQ

Q: 古いプロジェクトから Standard Assets の AircraftJet をコピーすればまだ使えますか?
A: 動かすことは可能ですが、Built-in Render Pipeline 前提のシェーダで URP / HDRP に持ち込むとピンクになります。マテリアルを差し替えれば動きますが、新規プロジェクトでは別アセットの利用を推奨します。

Q: 旋回中に勝手に高度が下がるのを防ぎたい
A: バンク角に応じて Pitch を自動補正(コーディネーテッドターン)するか、揚力に「重力相殺項」を加える調整が必要です。リアル機の操縦操作(バンクと同時にピッチアップ)を再現する形が一般的です。

Q: ヘリコプターも実装できますか?
A: 同様に Rigidbody + ForceAtPosition で「ローター中心からの揚力」を与えれば近似できます。ヘリ専用アセット(Heli Physics 等)を使うほうが楽です。

編集
Post Share
子ページ

子ページはありません

同階層のページ

同階層のページはありません

最近更新/作成されたページ