iT邦幫忙

2022 iThome 鐵人賽

DAY 29
0

畢竟現實不會有無限期的時間可以讓你重構程式碼,鐵人也只需要30天就能完賽,所以就把目前可以更好的地方稍微條列式整理出來,如果有興趣(?)回頭看那些篇章的可以思考一下。

  • 新增隨機系統
  • Factory的一些內容應該要拆到Builder去
  • 轉接器的抽象化
  • 更加注重制定規則
  • 嘗試消滅消滅UIInputObserver(或用更好的方式去寫相關作法)

UIInputObsrver.cs

using System; 
using System.Collections.Generic; 
using TbsFramework.Grid; 
using TbsFramework.Units; 
using UnityEngine; 

namespace Assets.Scripts.GUI.GUITool 
{ 
    public static class UIInputObserver 
    { 
        public static bool IsPlayerCanInput { get; set; } 
        public static bool IsUnitTurnChange { get; set; } 
        public static bool HaveCharacterStayOnFleeCell { get; set; } 
        public static List<Unit> StayFleeCellCharacter { get; set; } 
        public static List<Unit> AlreadyFleeCharacter { get; set; } 
        public static int FleeCharacterCount { get; set; } 
        public static Action FleeAction { get; set; } 
        public static bool HaveBuffAdd { get; set; } 
        public static Action<Transform, bool> FleeInfoAction { get; set; } 
        public static int NumberOfNeedFood { get; set; }  
        public static int CurrentPlayerHaveFoods { get; set; } 
        public static Camera MainCamera { get; set; } 
        public static CellGrid CellGrid { get; set; } 
    } 
}
  • 想把CellGridEventHandler改成Observer模式的做法

  • 時序耦合的問題
    雖然前面幾篇文章因為篇幅關係沒顯示全部的程式碼,不過現在的寫法有個挺大的問題是物件宣告成實體的時機
    如果有認真看GetFoodAndFleeGameEndCondition的範例的話,會看見GameEventSystem的相關設定Awake()Start()都宣告在不同的Script裡,希望未來還是可以盡量把功能的實體化時機集中在一個地方去做處理,而不是散在每個Script

  • Observer(二)裡面獲取麵包數量的更新應該可以寫得更好,但暫時沒時間將它優化。

  • 說不定根本沒有偵測麵包獲取事件被取消訂閱的一天?

  • 技能ScriptableObject化

參考資料

流離之歌


上一篇
Day 28:Unity簡易編輯器製作(二)—使用Odin排版ScriptableObject
下一篇
Day 30:感想與感謝
系列文
如何在Unity裡寫出具有一定擴充性的遊戲30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言