2Dゲーム『Launch Condition』の作成つづき。
前回終了時は次のステップとして重力源(他の惑星)追加や多段ロケット化をフェーズ4として進める計画をしていたが、大幅なアップデート(?)前に発射時の描画改善をフェーズ3.6として実施した。今回もほぼバイブコーディングでAntigravityを使用して進めた。
フェーズ3.6🚀: 発射時の描画改善
主な内容:
- ビジュアルの強化
- 発射台(Launchpad)画像と背景画像(Launch_Background)を挿入し、打ち上げ時のロケット上昇を視覚的にも捉えられるようにした。
- 高度が上がるにつれて「青空」から「暗黒の宇宙」へと滑らかに背景色がフェード(Atmosphere Fading)する処理を導入。
- シームレスなカメラワークと画角の最適化
- SpaceCamera.csを拡張して、キーボードでロケットのアップ([1]ロケットビュー)と地球全体([2] 惑星ビュー)を切り替え。また、特に発射直後は背景画像からはずれないようにズームアウトに制限を設けて個別保持することで、ビュー切替時にも対応。ズームもマウスの位置を中心に直感的に操作できる仕様に変更。
- さらに、常にロケットの進行方向を上にするか、重力方向を下にするかなど、カメラの回転モード([3]キー)をサイクリックに切り替えられるようにした。
今回は発射直後の雰囲気を向上することが主な目的であるため、Rocketの挙動などゲーム操作関連に変更なし。次回はPhase3.7としてロケットの多段化を進める予定。
また、これまでの開発フェーズとゲーム仕様などをまとめるページを新たに作成。完成はいつになる変わらないが、今後も進めるたびにこの専用ページをアップデートしていく予定。
2026年9月更新:
Launch ConditionはOS再インストール時の手違い等もありデータを喪失してしまったため、『Launch Condition: Orbital Calibrator』という名称で一からやり直すことにした。専用ページも作っていたが、いかにこれまでのまとめとして残しておく。
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
カメラ制御
カメラ制御
📋 主要関数・プロパティ技術リファレンス
| 場所 | 名称 | 役割・処理内容 |
|---|---|---|
| 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』ラベル付きの投稿