Unity 專案程式碼管理(二)

更新於 發佈於 閱讀時間約 2 分鐘

前言

這次要深入探討一些程式碼撰寫的習慣,不一定會減少程式碼量,但基本上能提高專案效率。


區域變數

多使用區域變數,減少使用成員變數、屬性,在方法行為單一職責化的情況下可以大幅降低程式碼的閱讀難度。
另外使用區域變數能夠讓方法的結果更容易預測,能更好寫出測試。


關注點分離

目標

關注點分離是很多語言框架實作的基礎,有實作過後端的同學應該不陌生。雖然 Unity 沒有特定說明程式碼撰寫風格,但將顯示與邏輯分離在多人協作時能提供很好的整合能力。

Unity ECS 其實變相地強迫使用者做到關注點分離

優點

  1. 能夠在沒有顯示的情況下測試邏輯(pure C#)
  2. 各個邏輯模組的進入點能夠被確認
  3. 除錯時可以更快瞄準邏輯問題
  4. 因為程式碼被細分了,版控比較不會有衝突的情況發生

缺點

  1. 程式碼的量變多了
  2. 響應事件,需要透過 event 或是 dispatch signal 等方式將顯示層的操作傳遞過去,會造成效能耗損(回呼地獄)
  3. 相依性,這部分要多考慮使用 DI 工具
  4. 除非有特別寫單元測試,否則原生 Unity 並不親和 pure C# ,有可能更難追蹤錯誤的地方

綜合以上優缺點,如果是小專案或是要快速產出 Mock 版的情況下不推薦使用。


撰寫習慣

微軟有為 CSharp 規範一套習慣。

在 Unity 裡面最常遇到需要指定物件參考,基於對物件的封裝欄位(Field)不應該公開,而能夠公開的會是屬性(Property)、方法(Method),但 Property 很難在 Editor 底下進行序列化,所以當一個類別的成員變多時,沒有系統的命名會疑惑程序猿。

另外值得一提的是換行習慣,由於 C# 不倚靠縮排來達成程式碼區塊,適時地換行是值得鼓勵的,我們來看下面這段 LINQ 程式碼:

userList.Where(user => user.isVip).Range(0, 20).SelectMany(user => user.Characters).ToList().Foreach(c => AddDLC(c));

應該很難直接看出這行到底做了啥,所以可以改成

userList
.Where(user => user.isVip)
.Range(0, 20)
.SelectMany(user => user.Characters)
.ToList()
.Foreach(c => AddDLC(c.id));

就能清楚條列出這行程式碼要做的是給前 20 位 VIP 玩家的所有角色新增 DLC。雖然這是滿極端的案例就是了......

最後提一下程式碼縮排跟括弧換行,基本上現在的 IDE 都提供相當優秀的程式碼格式化功能,但需要注意的是如果是接手其他人的程式碼,亂按格式化可能會導致版控衝突。


結語

這次說的內容比較偏概念,通過增加些許的程式碼量,進而提高效率,在多人協作時更能減輕交接時的困難。

留言
avatar-img
留言分享你的想法!
avatar-img
#Jaku的沙龍
6會員
10內容數
只要10分鐘!
#Jaku的沙龍的其他內容
2023/09/05
UPM 插件管理、匯入、打包
Thumbnail
2023/09/05
UPM 插件管理、匯入、打包
Thumbnail
2023/08/15
在其他語言會時常使用正規表達式來幫字串進行 Filter,在遊戲製作裡面比較遇不到處理使用者的字串輸入、資料庫查詢結果的情況,但在編輯程式碼,有搜尋(Ctrl+F)、取代(Ctrl+H)需求時使用 Regex 也能提升工作效率。
Thumbnail
2023/08/15
在其他語言會時常使用正規表達式來幫字串進行 Filter,在遊戲製作裡面比較遇不到處理使用者的字串輸入、資料庫查詢結果的情況,但在編輯程式碼,有搜尋(Ctrl+F)、取代(Ctrl+H)需求時使用 Regex 也能提升工作效率。
Thumbnail
2023/08/06
微軟想把 VS 的一些編輯功能在 VS Code 上實作, Unity 也在幾天前推出了基於 C# Dev Kit 的插件,因為新舊版本並不相容,這邊說明兩種(OmniSharp、Roslyn Analyzers)開發環境設置。
Thumbnail
2023/08/06
微軟想把 VS 的一些編輯功能在 VS Code 上實作, Unity 也在幾天前推出了基於 C# Dev Kit 的插件,因為新舊版本並不相容,這邊說明兩種(OmniSharp、Roslyn Analyzers)開發環境設置。
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
當你邊吃粽子邊看龍舟競賽直播的時候,可能會順道悼念一下2300多年前投江的屈原。但你知道端午節及其活動原先都與屈原毫無關係嗎?這是怎麼回事呢? 本文深入探討端午節設立初衷、粽子、龍舟競渡與屈原自沉四者。看完這篇文章,你就會對端午、粽子、龍舟和屈原的四角關係有新的認識喔。那就讓我們一起解開謎團吧!
Thumbnail
當你邊吃粽子邊看龍舟競賽直播的時候,可能會順道悼念一下2300多年前投江的屈原。但你知道端午節及其活動原先都與屈原毫無關係嗎?這是怎麼回事呢? 本文深入探討端午節設立初衷、粽子、龍舟競渡與屈原自沉四者。看完這篇文章,你就會對端午、粽子、龍舟和屈原的四角關係有新的認識喔。那就讓我們一起解開謎團吧!
Thumbnail
這篇文章將會講述 Unity 自帶參數的功能,在撰寫時要怎麼進行封裝。
Thumbnail
這篇文章將會講述 Unity 自帶參數的功能,在撰寫時要怎麼進行封裝。
Thumbnail
每個專案開發,都是由多個工程師來完成,就算只有一個人,隨著專案增量,你便會與過去的你面對面,這時候程式碼的可讀性高低就會成為左右你開發效率的一塊石頭,這篇就來說說幾個程式碼管理的小撇步
Thumbnail
每個專案開發,都是由多個工程師來完成,就算只有一個人,隨著專案增量,你便會與過去的你面對面,這時候程式碼的可讀性高低就會成為左右你開發效率的一塊石頭,這篇就來說說幾個程式碼管理的小撇步
Thumbnail
C# 9.0 給 Unity 程式設計上帶來的便利
Thumbnail
C# 9.0 給 Unity 程式設計上帶來的便利
Thumbnail
這篇文章將會分享 Clean Code 關於函式的重點,內容主要以個人閱讀後有印象的部分著手,有興趣了解更多請自行購買這本書。
Thumbnail
這篇文章將會分享 Clean Code 關於函式的重點,內容主要以個人閱讀後有印象的部分著手,有興趣了解更多請自行購買這本書。
Thumbnail
這篇文章將會講述 Inspector 的簡易優化小技巧,並介紹系列文章。
Thumbnail
這篇文章將會講述 Inspector 的簡易優化小技巧,並介紹系列文章。
Thumbnail
這篇文章將會講述使用 C# 的類( Class ) 來讓欄位模組(module)化。
Thumbnail
這篇文章將會講述使用 C# 的類( Class ) 來讓欄位模組(module)化。
Thumbnail
本篇文章將會介紹C#的基礎構成和字串的使用,若想要更詳細的教學,可以參考前一篇文章,前往Microsoft官方教學學習。
Thumbnail
本篇文章將會介紹C#的基礎構成和字串的使用,若想要更詳細的教學,可以參考前一篇文章,前往Microsoft官方教學學習。
Thumbnail
本文以實際的程式碼來說明Value Type和Reference Type的差異,並介紹實用的除錯工具。
Thumbnail
本文以實際的程式碼來說明Value Type和Reference Type的差異,並介紹實用的除錯工具。
Thumbnail
撰寫程式時,有沒有想過宣告的這些變數是怎麼運作的呢? 本文介紹了Value Type跟Reference Type,以及Variable的基本命名方式。
Thumbnail
撰寫程式時,有沒有想過宣告的這些變數是怎麼運作的呢? 本文介紹了Value Type跟Reference Type,以及Variable的基本命名方式。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News