Dependency Injection in Unity3D Part 2: 如何開始?

延續上一篇的例子,
接下來都會以Zenject這個DI框架來做範例

目標功能:讓英雄可以四處移動與射擊,可以切換武器

1. 導入Zenject (應該大家都沒問題,就不贅述了)

2. 編寫主邏輯
可以看到Hero負責移動,Armony負責處理武器發射,
Game在每偵處理輸入,這裡讓我偷懶一下,記得去InputManager註冊一下SwitchRight與SwitchLeft

3. 創造武器
我們先編寫2種武器
Rifle向前射出子彈
TripleRifle額外從左右30度方向射出子彈
大家應該都了解Pool Pattern,所以基於篇幅就不貼出BulletPool

4. 最後,編寫Composition Root
我們先來談談Composition Root是什麼。
回想你在學習任何一個新語言的時候,總是需要一個main函式來當作程式的進入點,並在main函式創建所有軟體所需要的instance。我們在使用DI時,一樣需要一個進入點在這個進入點處理所有的相依關係。

在Zenject,進入點為scene的Awake()。Zenject把scene需要的相依邏輯集中在稱作SceneContext的腳本上。一個scene只能有一個SceneContext,一個context可以有多個installer。

寫完installer之後,就可以把它放到場景上了。

大功告成

從程式碼可以看到,場景上的物件除了SceneContext,只有Hero與Bullet而已,甚至連BulletPool都不是MonoBehaviour

接下來的篇幅

可能有人會覺得,這樣子的功能,用MonoBehaviour-base寫會比較快。
因此下一篇會比較DI與MonoBehaviour-base在開發上的不同。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。