Unity 2D 粒子模擬系統功能總覽

郭俊鑫郭俊鑫
1 min read

🎯 核心功能一覽

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.txt

  • LogParticleStates()(每秒):

    • 輸出「時間、編號、位置、速度」到畫面與檔案
  • AppendCollision(message):合併/分裂事件文字紀錄,隨後一起寫入檔案

6. 系統統合(SimulationController.cs

  • Start():初始化日誌、綁定各模組、根據輸入欄位產生初始粒子

  • Update()

    1. 同步 UI 狀態 → 更新 ignoreCutoffgravityCutoffDistance

    2. 顯示粒子數量

    3. 呼叫 ApplyForces() 執行物理模擬

    4. 呼叫 TrackEnergy() 更新能量圖表

    5. 每秒呼叫 LogParticleStates() 輸出日誌

  • ResetSimulation()PauseSimulation()SetTimeScale() → 提供一鍵重置、暫停與速度倍率控制

    🛠 後續擴充方向

    • 粒子壽命管理:自動隨時間銷毀老舊粒子

    • 碰撞動畫效果:在合併/分裂時加入粒子爆裂粒子特效

    • GPU 計算:利用 Compute Shader 或 DOTS 提升萬顆粒子效能

    • 資料匯出:將能量與粒子數變化導出 CSV,做外部分析

    • 自訂主題 UI:更換顏色、字體、版型,打造專屬風格

0
Subscribe to my newsletter

Read articles from 郭俊鑫 directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

郭俊鑫
郭俊鑫