[Unity] 事件訂閱與問題(下)- C# 介面
本篇繼續上一篇的內容來介紹第三種事件訂閱的方式:C# 介面。並在最後比較這三種訂閱方式。
本篇繼續上一篇的內容來介紹第三種事件訂閱的方式:C# 介面。並在最後比較這三種訂閱方式。
UnityEvent 與 C# event
在遊戲開發中,一個物件經常需要訂閱另一個物件的事件,以在事件發生時,執行對應的動作,像是玩家輸入、觸發機關、關卡管理等。而在 Unity 中,常見的方式是使用 UnityEvent 與 C# event 來讓物件提供事件介面,讓其它物件訂閱,但這兩者各自問題,反而讓程式容易出錯。本篇文章整理 UnityEvent...
當不同元件有相似的資料時,應該把相同的部份整理出來成為一個獨立的資料定義,並在用到的地方使用這個資料定義。如果元件之間各自定義的話,當要新增或修改資料時,所有用到的地方都得要一併更新,既秏時又費力,且容易出錯,會是一場災難。
在最近參與的遊戲專案中,我負責重新撰寫經過時間累積、充滿不同想法的核心元件。隨處可見複製的程式碼,元件之間交互使用,亦或是為了加新功能而繞路。可以看出每個新功能為了不影響之前的功能,正維持著微妙的平衡。對於負責重寫元件的我來說就好像是在茂密的遠古森林裡一路披荊斬棘,充滿挑戰。就想寫來記錄過程和心得。
Unity 2021 LTS 也出來好一陣子了,在 2021.2 版後就開始導入 C# 9.0。使用了半年後,發覺 C# 9.0 當中新增的語法可以讓程式碼更加簡潔易讀,整理成本篇來介紹個人常用的語法。
在專案開發上遇到這樣的問題:每個繼承類別要提供類似的 static 函式,功能差不多,但只有要取用的值不一樣。就在想能不能把 static 函式拉到基礎類別上,但又可以依照繼承類別給與不同的 static 成員值。
最近負責的 Unity 專案中,有很多 UI 有返回的按鈕,而這些按鈕也要可以透過程式觸發。如果為每個 UI 撰寫觸發的函式,一但觸發的邏輯改變,修改會是個大工程。如果為了這個小功能撰寫基礎類別,又顯得大才小用,而且 C# 的類別只能同時繼承一個類別,擴充性也不高。但 C# 類別可以繼承多個 interface,...
用 Unity 開發 Android 上的遊戲時,如果有用到 PlayerPrefs 儲存使用者的資料,可能會發現在重新安裝後,這些資料還是存在。這是因為在 Android 6.0 以上的版本,Android 都會自動備份應用程式的資料,在重新安裝後會恢復這些資料。
本篇用圖表來介紹 C# 類別成員的存取關係,有 private、protected、public,跟跨組件的成員存取,有 internal、protected internal、private protected。以及比較一般繼承與多型繼承中,會取得什麼版本的方法。
之前在撰寫 Unity 套件的時候,因為不知道使用者會用什麼類別來傳資料,所以都轉成 object 型別來傳遞,後來發現這會有效能上的問題。本篇文章就來探討這個問題以及解法。