C# 上 Observer pattern 的實作差異 – observer pattern on C#

前陣子有注意到,大多數的書籍或網站資料在介紹 設計模式(Design Pattern) 時,往往所採用的實作方式都是以 C++ 或 JAVA 為實作基礎,甚至在 Unity 為主題的書籍上,也沒有針對 C# 做進一步說明。

事實上作為一個不斷擴充版本及功能的語言,.NET 的 C# 的使用上提供了更多樣化的類別或介面,可以用不太一樣的方式來實作設計模式,妥善的應用 C# 所帶來的便利。

最明顯的例子,就是利用 C# 的 delegate,可以更加方便的實作 觀察者模式(Observer pattern),甚至讓應用上更加靈活。本文記錄了三種作法可讓大家比較參考:

  • 純 class
  • Delegate (Action)
  • Event & EventHandler

Read More »

[C#/Unity] 更多 Singleton – More Singleton in Unity

在舊文章 應用 Singleton pattern 及 Unity Component 做系統拆分與管理 – Dividing your game system in unity. 中,我開發了一套架構來作為單一 Singleton 的替代方案,用於統一管理會在整個 Unity 專案中使用到的遊戲功能系統。

該篇文章中的 GameSystemMono (即仿 Singlton 的組件) 繼承了 MonoBehaviour,來實現一些設計上的想法。不過帶來優點的同時也產生了一些限制,經過與他人的討論後,認為還是需要一個不依賴 MonoBehaviour 的 Singleton 組件方案,兩者互相補足,而這個想法終於在最近進行了實作。

Read More »

在 Unity 用途廣泛的數值彈簧 – Numeric Springing

今天來聊聊一個很數學、很物理的東西:彈簧。

做遊戲難免會遇到的優化問題,就是玩家操控腳色的流暢性,一個腳色在玩家的操控下走走停停、跑跑跳跳,光是如何讓物件的 position 可以流暢且自然,就是個大課題。或者在外部操控器的訊號跟物件的移動之間的協調,如何讓物件的移動有著 “起承轉合" 般的真實動感,在 VR 遊戲上會大幅影響玩家的舒適度,以及對遊戲的接受度。

有個方式可以處理上述的議題,就是套用 “數值彈簧" (numeric springing) 在物體的移動上,產生起步的加速、停留的減速,減少物體在移動時讓然覺得卡頓或者突兀的感覺。"數值彈簧" 是個我一直想要理解與實作的東西,如今終於動工了,這篇文章分享的是我的作法,以及 數值彈簧 的廣泛用途。

Read More »

開發 Unity Android Plugin – 從零開始

這篇文章記錄了我所知道的基本 Unity Android Plugin 開發流程,目的是補充我所看過的網路資源,在細節上的說明不足。會特別針對幾個我遭遇過的疏漏,或因開發需求不同會有的細節變化進行說明。

整篇文章將流程分為幾段來描述:

  • 建立 Android 專案
  • 找到並匯入 Unity Java classes
  • 編寫你的 Java classes
  • 處理 build.gradle file
  • 編譯 .jar 並放到該去的位置
  • 編寫 Manifest.xml
  • 編寫 C# Script 作為 Plugin API

Read More »