【Launch Condition】フェーズ3.6

4/05/2026

AI Game Launch Condition Unity

 2Dゲーム『Launch Condition』の作成つづき。
前回終了時は次のステップとして重力源(他の惑星)追加や多段ロケット化をフェーズ4として進める計画をしていたが、大幅なアップデート(?)前に発射時の描画改善をフェーズ3.6として実施した。今回もほぼバイブコーディングでAntigravityを使用して進めた。
打ち上げの際には1:1スケールで表示させる様に変更。背景画像の追加と、低高度時の背景を青くすることで上昇する様子を観察することが出来るようになった。

フェーズ3.6🚀: 発射時の描画改善

主な内容:
  1. ビジュアルの強化
    • 発射台(Launchpad)画像と背景画像(Launch_Background)を挿入し、打ち上げ時のロケット上昇を視覚的にも捉えられるようにした。
    • 高度が上がるにつれて「青空」から「暗黒の宇宙」へと滑らかに背景色がフェード(Atmosphere Fading)する処理を導入。
  2. シームレスなカメラワークと画角の最適化 
    • SpaceCamera.csを拡張して、キーボードでロケットのアップ([1]ロケットビュー)と地球全体([2] 惑星ビュー)を切り替え。また、特に発射直後は背景画像からはずれないようにズームアウトに制限を設けて個別保持することで、ビュー切替時にも対応。ズームもマウスの位置を中心に直感的に操作できる仕様に変更。
    • さらに、常にロケットの進行方向を上にするか、重力方向を下にするかなど、カメラの回転モード([3]キー)をサイクリックに切り替えられるようにした。
今回は発射直後の雰囲気を向上することが主な目的であるため、Rocketの挙動などゲーム操作関連に変更なし。次回はPhase3.7としてロケットの多段化を進める予定。

また、これまでの開発フェーズとゲーム仕様などをまとめるページを新たに作成。完成はいつになる変わらないが、今後も進めるたびにこの専用ページをアップデートしていく予定。


2026年9月更新:
Launch ConditionはOS再インストール時の手違い等もありデータを喪失してしまったため、『Launch Condition: Orbital Calibrator』という名称で一からやり直すことにした。専用ページも作っていたが、いかにこれまでのまとめとして残しておく。
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
カメラ制御

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

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

ーーー

『Launch Condition』ラベル付きの投稿

ラベル

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

人気の投稿

QooQ