Launch Condition

Unity & Antigravityで制作しているロケット発射ゲーム『Launch Condition』のまとめ。

Phase 3.6: 発射時の描画改善

Launch Condition開発フェーズ

以下のフェーズは最初から計画した内容ではなく、作成しながら仕様や計画を随時変更している。(2026/3/29時点: Phase 3.6まで完了

Phase 1.0: ロケット発射 [投稿]

    目的: まずは作り始める。「初速と角度から放物線を描く」
  • 初速を規定し一定重力場での放物線運動を実装

Phase 2.0: 発射条件を“触れる”ようにする [投稿]

    目的: 発射条件を設定できるようにする。
  • 初速・射角のパブリック変数化し、UnityのInspectorで設定
  • RESETボタンによる環境の完全復元(燃料、タイマー、質量の同期)
  • UIでRESETボタンを追加

Phase 2.5: Spriteを画像へ変更 & 推力の設定 [投稿]

    目的:    ビジュアル化
  • 無機質な多角形だけだったPhase 2.0から、画像(ChatGPT生成)へ差し替え
  • 初速を与える代わりに、推力と噴射時間により加速させる計算の実装

Phase 3.0: 地球周回 [投稿]

    目的: 地球周回軌道への投入と視認性向上
  • 地球重力に基づく周回軌道の実装
  • 軌道予測(Orbit Predictor)の実装
  •  SpaceCameraによるカメラ切り替えと自動追従

Phase 3.5: 飛行制御の高度化 [投稿]

    目的:    インタラクティブな軌道操作と視認性の向上

  • HUD実装: 高度、速度(垂直/水平)、Gフォース、軌道要素(Ap/Pe)の可視化
  • 操作性向上: キーボードによる動的な時間倍率(x1〜x100)調節、ズームに応じたロケットのスケーリング
  • 発射後シーケンス: Pitch OverとGravity Turn
  • エンジンモデル: 比推力(Isp)の大気圧変化モデル導入
  • ロケットプリセット: Falcon 9, H3, Ariane 5 などの性能データ実装
  • 軌道予測ラインを修正(Eulerと4次Runge=Kutta法(RK4)を切り替え)

Phase 3.6: 発射時の背景とカメラ機能調整

    目的:    発射直後のロケットが上昇していく様子を改善

  • 発射台スプライトと背景画像を追加
  • ロケット追従カメラの向き切り替え
  • 起動時のみ地面から浮いていたRocket位置を修正

Phase 3.7: 多段ロケット化

    目的    ロケットの多段化による地球周回軌道投入

  • 多段ロケット(Staging):  機体切り離しと質量減少のシミュレーション
  • 軌道投入: 多段化により周回軌道投入を実現

Phase 4: 他天体の追加と操作性の洗練

    目的    重力圏の拡張とより複雑な操作の実現

  • 月・火星など他の天体の追加と重力圏(SOI)の切り替え
  • UI/操作性の更なる向上(UIでのパラメータ調整機能、マニューバ計画)

Phase 5: ゲーム化と仕上げ

    目的:    ゲームリリース
  • ステージ制(ミッション制)の導入
  • エフェクト(噴射・大気圏突入等)のブラッシュアップ
  • サウンド・BGMの追加

Code Overview

現在のスクリプト構成 (Phase 3.6 現行版)

  • PhysicsConstants.cs
    システム世界の法典: 現実の時間・距離・質量を Unity の空間に落とし込むためのスケール変換(1 Unit = 1 km)と、万有引力定数や地球のパラメータなどの「宇宙の法則」を一手に定めている静的クラス。
  • RocketTest.cs
    ロケットの頭脳と心臓: 機体の物理挙動の全てを司るメインスクリプト。エンジンの推力・万有引力の適用、高度や大気圧による比推力 (Isp) 変化の計算などを行う。また、ピッチ・オーバーやグラビティ・ターンの自動追従、遠景パノラマや発射台の自動生成も担当している。
  • SpaceCamera.cs
    宇宙を映す瞳: ロケットのアップ(1キー)と惑星全体を見渡すビュー(2キー)をシームレスに切り替える。高度に応じて青空から暗黒の宇宙空間へ背景色をフェードアウトさせたり、「重力方向」や「ロケットの進行方向」に合わせてカメラをダイナミックに回転させる機能を持つ。
  • RocketHUD.cs (UI Toolkit)
    パイロットの計器盤: 速度(水平・垂直成分)、高度、燃料残量、そしてロケットにかかる Gフォース(固有加速度)や、未来の軌道の遠地点 (Apogee)・近地点 (Perigee) などを UI 上にリアルタイムで描画する。
  • OrbitPredictor.cs
    未来を見通すライン: 現在のロケットの位置・速度に加え、今セットされている「推力プログラム」を加味して、数十分後の軌道を Line Renderer によって画面に描画する。Euler法と、より精密な4次ルンゲ=クッタ (RK4) 積分法の切り替えをサポートしている。


🏗️ コード全体像(システムフロー)

PhysicsConstants.cs
物理定数・スケーリング定義
🚀 RocketTest.cs
挙動シミュレーション・メインロジック
RocketHUD.cs
数値読み出し・表示
OrbitPredictor.cs
軌道予測描画
SpaceCamera.cs
カメラ制御

📋 主要関数・プロパティ技術リファレンス

場所 名称 役割・処理内容
PhysicsConstants ToUnityDistance[m] 現実のメートルをUnity単位(1km=1Unit)に変換。
ToUnityForce[N] 推力[N]をUnityのAddForce用の値にスケール変換。
GetUnityMu[mass] Unity空間での重力定数μ(G*M)を算出。
ToUnityMass[kg] 現実の質量をUnity上のRigidbody.mass単位に変換。
TimeScale 現実の1秒がUnityで何秒に相当するかを定める定数。
RocketTest ApplyGravity() 万有引力の法則に基づき、地球へ引き寄せる力を適用。
ApplyThrust() 燃料消費、高度によるIsp変化を含むエンジン加速処理。
HandleAutoManeuver() 垂直上昇・ピッチオーバー・グラビティターンの自動制御。
CalculateOrbitalElements() 現在の状態から離心率、遠地点・近地点を算出する数学中枢。
ApplyDynamicScaling() カメラのズームに応じてロケットをデフォルメ(拡大)表示。
SetTimeScale(float) タイムワープ変更時、速度ベクトルを物理的に整合補正する。
GenerateLaunchPad() 打ち上げ地点に合わせて地面用の発射台オブジェクトを動的生成。
GetCurrentIsp() 高度に応じたエンジンの比推力(燃費性能)を取得。
Launch() / Reset() ミッション開始および各種物理パラメータの完全初期化。
(Prop) Eccentricity 現在の軌道の離心率。1.0以上で脱出軌道を意味する。
SpaceCamera HandleTargetSwitch() ロケット自慢視点と地球全体視点の切り替え・ズーム記憶。
UpdateSkyColor() 高度に基づいて背景を青空から黒い宇宙空間へフェード。
HandleZoom() マウスカーソル位置を不動点とした直感的なスムーズズーム。
EnforceZoomLimits() 遠景画像の見切れ防止や最低ズーム幅の制約を適用。
SubSystems RocketHUD.Update() 速度・高度・Gフォース等の物理値をUIにリアルタイム反映。
Orbit.UpdatePrediction() Euler/RK4法を用い、現在状態から将来の軌跡を予測描画。

ーーー

『Launch Condition』ラベル付きの稿

最終更新: 2026/3/29

ラベル

Outdoor (23) 3D Printer (13) Raspberry Pi (11) Learning (10) Game (8) Ubuntu (8) Movie (7) Blog (6) Pico (6) AI (5) FreeCAD (5) Python (5) Unity (5) MSFS (4) Gadget (3) Launch Condition (3)

人気の投稿

QooQ