Unity 2D 粒子模擬系統功能總覽
前言 這個專案是一個高度模組化的 2D 粒子模擬系統,使用 Unity 來實作萬有引力、碰撞合併、動量與能量守恆分裂、即時能量監控、UI 控制面板,以及日誌輸出等功能。以下列出目前所有的重要功能與模組,方便你快速瞭解整體架構與特色。
🎯 核心功能一覽
1. 粒子管理 (ParticleManager.cs)
CreateParticle(position, velocity, mass):集中建立粒子,配置
Rigidbody2D、質量、初始速度
根據質量自動調整大小(
scale ∝ mass^(1/3))依質量著色(藍→綠→黃→橙→紅 5 色)
Label 標籤:每顆粒子上方動態顯示其編號、位置與速度
2. 萬有引力與碰撞 (GravitationalSystem.cs)
ApplyForces():每幀迴圈計算所有粒子對的引力
引力公式:
F = G·m₁·m₂ / r²支援距離上限與開關控制
合併(Merge):當距離 <
mergeDistance且相對速度低時- 動量守恆 → 合併成單一粒子、質量加總、速度重算
分裂(Fragment):當距離 <
mergeDistance且相對速度高時隨機分割 → 保持總質量、動量與能量守恆的多碎片爆炸
支援最小質量限制與碎片數上限
3. 能量監控 (EnergyTracker.cs)
TrackEnergy(deltaTime):每 0.5 秒累積計算系統總動能
動能公式:
K = ½·m·v²,遍歷所有粒子求和即時顯示:
TMP_Text顯示當前總動能數值UI 容器產生柱狀圖,動態呈現歷史能量變化
4. UI 控制面板 (SimulationUIManager.cs & SimulationUIBindings.cs)
遠距離引力開關(Toggle)
最遠作用距離滑桿(Slider)
粒子數量顯示(Text)
暫停/繼續、重置模擬 按鈕
時間倍率調整(Slider + 顯示倍率文字)
5. 日誌輸出 (LogExporter.cs)
InitializeLogFile():依時間命名檔案 →
particle_log_YYYYMMDD_HHMMSS.txtLogParticleStates()(每秒):
- 輸出「時間、編號、位置、速度」到畫面與檔案
AppendCollision(message):合併/分裂事件文字紀錄,隨後一起寫入檔案
6. 系統統合(SimulationController.cs)
Start():初始化日誌、綁定各模組、根據輸入欄位產生初始粒子
Update():
同步 UI 狀態 → 更新
ignoreCutoff、gravityCutoffDistance顯示粒子數量
呼叫
ApplyForces()執行物理模擬呼叫
TrackEnergy()更新能量圖表每秒呼叫
LogParticleStates()輸出日誌
ResetSimulation()、PauseSimulation()、SetTimeScale() → 提供一鍵重置、暫停與速度倍率控制
🛠 後續擴充方向
粒子壽命管理:自動隨時間銷毀老舊粒子
碰撞動畫效果:在合併/分裂時加入粒子爆裂粒子特效
GPU 計算:利用 Compute Shader 或 DOTS 提升萬顆粒子效能
資料匯出:將能量與粒子數變化導出 CSV,做外部分析
自訂主題 UI:更換顏色、字體、版型,打造專屬風格