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
