開頭提醒,從 Day21 開始我開始接觸很多超過能力邊界的知識,後續內容紀錄的是我在當下的理解,所以內容可能有大量誤解或錯誤。
視覺容器是重構改動比較大的部分,原本腳本的職責太混雜了,所以幾乎整個重寫。
Domain 是裡有視覺容器的顯示模式,計算用的 ValueObject 、策略接口以及策略模式算法定義。float3 是使用 Unity.Mathematics 函式庫的數學變數。(其實不應該,但為了省事就用了)
Application 定義了容器需要的接口、各種 Port 接口以及各種視覺容器的 UseCase,UseCase 透過對應的 Port 執行具體行為,例如更新顯示模式、設置錨點、旋轉、翻轉等等。
Infrastructure 進行 Port 的 Unity Adapter 轉換實作,把攝影機資訊、Unity Aimator 等資訊轉接給 Application 的 UseCase。
最後 Presentation 提供一個 Monobehavior 的 Controller 提供外部操操作的進入點
為了避免計算互相干擾,不同顯示功能分成不同 Transform 執行,最上層是面對攝影機的 Billboard 算法、第二層是控制中心點偏移、第三層負責旋轉和翻轉,最底下則會放入真正的視覺物件實例。
而要操作視覺容器的 Character 方面也增加一個 Adapter,把 VisualController 轉接成狀態機 Addon 使用的 IVisualPort 。
Character 的視覺幾乎是沿用舊版,由兩個 Addon 分別處理動畫播放(根據狀態)和翻轉(根據行動時面對的方向)。
雖然都一樣,但還是放張新動圖示意。
視覺容器也沒有用嚴謹的分層,但目前的架構已經夠好維護了,真的需要再回來改就好。