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
6會員
10內容數
只要10分鐘!
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
#Jaku的沙龍 的其他內容
紀錄如何讓簡單的 Property 在 Inspector 內顯示。
每個專案開發,都是由多個工程師來完成,就算只有一個人,隨著專案增量,你便會與過去的你面對面,這時候程式碼的可讀性高低就會成為左右你開發效率的一塊石頭,這篇就來說說幾個程式碼管理的小撇步
C# 9.0 給 Unity 程式設計上帶來的便利
如何使用Game CI 提供的Github Action 將建置專案自動化
UnityEvent 簡單介紹。
紀錄如何讓簡單的 Property 在 Inspector 內顯示。
每個專案開發,都是由多個工程師來完成,就算只有一個人,隨著專案增量,你便會與過去的你面對面,這時候程式碼的可讀性高低就會成為左右你開發效率的一塊石頭,這篇就來說說幾個程式碼管理的小撇步
C# 9.0 給 Unity 程式設計上帶來的便利
如何使用Game CI 提供的Github Action 將建置專案自動化
UnityEvent 簡單介紹。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
這篇文章將會講述 Unity 自帶參數的功能,在撰寫時要怎麼進行封裝。
Thumbnail
這篇文章將會講述平滑的旋轉與單次旋轉的差異,並介紹旋轉的兩種體系與其使用效果,並提供參考的示範影片。
Thumbnail
這篇文章將會講述常見的座標(Transform)旋轉方式,適合初學者到進階程式員複習。
Thumbnail
這篇文章將會簡單介紹無瑕的程式碼(Clean Code)是一種什麼樣的程式設計流派,並且分享以及命名相關的概念。
Thumbnail
這篇文章將會講解 Git 專案上傳 GitHub 的流程。
Thumbnail
前言   這篇文章將會講述碰撞事件的撰寫,跟碰撞事件有關的函式共有六種,分別為 OnCollisionEnter/Stay/Exit 和 OnTriggerEnter / Stay /Exit ,本篇文章將會講述通用的邏輯。 Collider | 碰撞體   在之前我從組件(Component)和程
Thumbnail
本文章將藉由我的經歷,講述普通人邁向遊戲設計師的歷程,首先簡單介紹遊戲設計師,再把這段時間的經歷分成五步,從職業基本認識到入門方式一步一步介紹,如果你對遊戲設計有興趣、摸索如何成為遊戲設計師,那我相信這篇文章會適合你。
Thumbnail
本文章主要介紹保護程式的方法及封裝方法的唯讀屬性。
Thumbnail
這篇文章主要介紹父子關係,以及相關的程式控制代碼列舉。
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
這篇文章將會講述 Unity 自帶參數的功能,在撰寫時要怎麼進行封裝。
Thumbnail
這篇文章將會講述平滑的旋轉與單次旋轉的差異,並介紹旋轉的兩種體系與其使用效果,並提供參考的示範影片。
Thumbnail
這篇文章將會講述常見的座標(Transform)旋轉方式,適合初學者到進階程式員複習。
Thumbnail
這篇文章將會簡單介紹無瑕的程式碼(Clean Code)是一種什麼樣的程式設計流派,並且分享以及命名相關的概念。
Thumbnail
這篇文章將會講解 Git 專案上傳 GitHub 的流程。
Thumbnail
前言   這篇文章將會講述碰撞事件的撰寫,跟碰撞事件有關的函式共有六種,分別為 OnCollisionEnter/Stay/Exit 和 OnTriggerEnter / Stay /Exit ,本篇文章將會講述通用的邏輯。 Collider | 碰撞體   在之前我從組件(Component)和程
Thumbnail
本文章將藉由我的經歷,講述普通人邁向遊戲設計師的歷程,首先簡單介紹遊戲設計師,再把這段時間的經歷分成五步,從職業基本認識到入門方式一步一步介紹,如果你對遊戲設計有興趣、摸索如何成為遊戲設計師,那我相信這篇文章會適合你。
Thumbnail
本文章主要介紹保護程式的方法及封裝方法的唯讀屬性。
Thumbnail
這篇文章主要介紹父子關係,以及相關的程式控制代碼列舉。