Skip to main content

Command Palette

Search for a command to run...

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

前言 這個專案是一個高度模組化的 2D 粒子模擬系統,使用 Unity 來實作萬有引力、碰撞合併、動量與能量守恆分裂、即時能量監控、UI 控制面板,以及日誌輸出等功能。以下列出目前所有的重要功能與模組,方便你快速瞭解整體架構與特色。

Published
•1 min read•View as Markdown

🎯 核心功能一覽

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 狀態 → 更新 ignoreCutoff、gravityCutoffDistance

    2. 顯示粒子數量

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

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

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

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

    🛠 後續擴充方向

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

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

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

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

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

More from this blog

【5/8 更新】2d 粒子模擬系統:ui 分區、標籤管理、邊界限制與力向量可視化

畫面 UI 三區塊化 標籤動態顯示與排序 畫面邊界位置強制約束 萬有引力向量可視化 以下分別介紹每個部分的需求、實作與程式碼重點。 一、畫面 UI 三區塊化 需求: 左側輸入區(僅在按下「開始」前顯示) 中間世界區(永遠用來渲染粒子本體與標籤) 右側控制區(開始後顯示所有操作按鈕/滑桿/圖表,不覆蓋世界區) 實作: 在 Canvas 下建立三個 Panel:LeftPanel、WorldPanel、RightPanel LeftPanel:固定寬 300px,掛 Ver...

May 9, 20253 min read

Unity 2D 粒子模擬系統 — 今日更新總結

已思考 2 秒鐘 在本次更新中,我們從架構、效能、物理到 UI,都進行了大規模的優化與功能擴充,包含: 模組化重構 效能優化五部曲 互動式 UI 強化 Collider2D 碰撞檢測 動態縮放與顏色漸變 邊界管理 以下依序詳述每個部分。 1. 模組化重構 ParticleManager.cs:集中管理粒子與標籤,採用物件池(Pool)技術。 GravitationalSystem.cs:只負責萬有引力計算,碰撞行為改由 HandleCollision 處理。 Partic...

May 7, 20252 min read

郭sir's Blog

7 posts