開發日誌 #1 - 初始構想與需求分析

開發契機

2025 年 9 月 27 日,三天連假的第一天,我決定開始執行這個心心念念很久的專案——Parasync 狀態同步框架。

問題背景

長期以來,我使用公司開發的連線工具製作連線遊戲,但這套工具的基礎設計一直沒有更新過,逐漸浮現出許多難以解決的問題。

現有框架的限制

公司的同步框架採用「事件同步」設計:

  • 當遊戲中任何狀態改變時,開發者必須手動發送網路事件
  • 每個端點需要自行接收並處理這些事件來同步狀態

遇到的困境

在實作斷線重連中途加入遊戲這兩項功能時,事件同步的設計產生了大量工程負擔:

  1. 狀態重建問題:斷線後重新加入的使用者需要獲得當前遊戲的完整狀態,最直接的做法就是重新發送所有相關事件
  2. 開發負擔:每當工程師新增功能時,都必須同時考慮「斷線重連時需要重送哪些事件」
  3. 維護困難:在大型專案中,這種設計對開發非常不友善,容易遺漏或出錯

核心提問

有沒有一種方法,可以讓開發者不需要管斷線重連時的資料同步問題?

解決方案:狀態同步

經過與多位前輩和資深工程師討論後,我確定了方向:製作一個狀態同步框架

狀態同步 vs 事件同步

狀態同步的核心概念:

  • 系統直接同步遊戲中的各種狀態(參數)
  • 斷線重連的使用者直接接收當前遊戲的所有狀態
  • 開發者無需手動處理重送事件的邏輯

市場調查

在開始開發前,我先調查了市面上的連線框架,想看看是否已經有符合需求的輕便網路框架:

主要框架比較

  1. Photon:廣為人知的 Unity 連線套件
  2. Mirror:完全開源,從舊時代 UNet 演化而來,使用者眾多
  3. PurrNet:開源網路框架
  4. FishNet:開源網路框架,使用方式有 UNet 的影子

發現的問題

這些網路框架都有類似的功能設計,但如果要將它們導入已經存在網路系統的遊戲中(例如公司的專案),基本上很難進行技術遷移:

  • 網路同步規則被整套框架限制住
  • 必須掛載 NetworkObject
  • 必須繼承 NetworkBehaviour
  • 各種強制性的設計限制

這些設計讓我在遷移技術時感到寸步難行。

理想的使用方式

我希望的使用體驗是:

  • 只需在要同步的物件上掛一個介面
  • 在要同步的變數上加上一個 Attribute 就好

開發歷程

第一次嘗試:失敗

一開始我和 AI 協作進行框架設計,但第一個版本混合了太多功能:

  • 資料序列化
  • 網路傳輸
  • 連線方式的實作

這些功能混雜在一起,讓框架變得過於複雜。我果斷選擇重做。

第二次嘗試:仍不理想

第二次,我花更多時間和 AI 協作「設計」部分,但因為設計不夠嚴謹,最後做出了一個似是而非的系統。

第三次嘗試:成功

第三次,我花了非常多時間和 AI 進行設計,確保每一個地方的設計都符合我的需求後才開始動工。這次製作出來的結果終於比較符合我的理想狀況。

學習心得

經過三次的設計迭代,我深刻體會到:

  • 設計比實作更重要:充分的前期規劃可以避免後續重工
  • 需求必須明確:模糊的需求只會產生模糊的結果
  • 與 AI 協作的關鍵:清楚表達需求,確認每個設計細節

返回 Parasync 專案首頁