跳至主要内容

NoticeCondition

重要 注意 提醒

Coding Style wiki


NoticeConditionNoticeSystem通知條件基類 (抽象類),自定義條件需繼承並實作 ShowCondition 判斷是否顯示紅點,經由 NoticeManager.RegisterCondition 註冊後自動分配條件 ID;可透過 Right-Click Create/OxGKit/Notice System/Template Notice Condition.cs 建立條件模板 (參考 模塊介紹)。

命名空間OxGKit.NoticeSystem
類型public abstract class NoticeCondition
原始碼NoticeCondition.cs
using OxGKit.NoticeSystem;

快速上手

using OxGKit.NoticeSystem;
using UnityEngine;

public class NewMailCond : NoticeCondition
{
#region Default
// 慣例:定義靜態屬性取得自動分配的條件 ID
public static int id { get { return NoticeManager.GetConditionId<NewMailCond>(); } }

// 於場景載入前自動註冊條件 (對應 BeforeSceneLoad 模板)
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
static void Register()
{
NoticeManager.RegisterCondition<NewMailCond>();
}
#endregion

public override bool ShowCondition(object data)
{
if (data != null)
{
MailBox mailBox = data as MailBox;

// 有未讀郵件則顯示紅點
if (mailBox.unreadCount > 0) return true;
}

return false;
}
}

通用規則

  • 條件類為純邏輯類ShowCondition 內不要持有 MonoBehaviour 狀態或場景引用。
  • ShowConditiondata 可能為 null 或不同類型 (多個 UI 共用同一條件時),需做防禦性檢查
  • 條件 ID 由 NoticeManager.RegisterCondition 註冊時自動分配,慣例上於條件類中定義靜態屬性 id

提醒 單一 NoticeItem 持有多個條件為 OR 邏輯 (任一符合即顯示);若需 AND 邏輯,將整組判斷寫在同一個條件類的 ShowCondition 中。


方法總覽

方法說明
SetId設置條件 ID (由 NoticeManager 註冊時自動調用)。
GetId取得條件 ID。
ShowCondition(抽象) 依數據判斷條件是否成立 (是否顯示紅點)。

SetId

public void SetId(int id)

設置條件 ID。

注意NoticeManager.RegisterCondition 於註冊時自動調用,一般無需自行調用。

GetId

public int GetId()

取得條件 ID (亦可透過 NoticeManager.GetConditionId<T>() 以類型查詢)。

ShowCondition

public abstract bool ShowCondition(object data)

依傳入的數據判斷條件是否成立,回傳 true 表示顯示紅點data 為 NoticeItem 註冊時透過 NoticeInfo 傳入的數據。


NoticeInfo

通知資訊 (結構),包含條件 ID 與判斷數據,作為 NoticeItem.RegisterNotice / RenewNotice 的註冊單位。

類型public struct NoticeInfo
原始碼NoticeInfo.cs

成員

成員說明
public int conditionId條件 ID。
public object data交給 ShowCondition 判斷的數據 (可為數值類型或參考類型)。

建構子

public NoticeInfo(int conditionId, object data)
// 參考類型數據 (變更後僅需 Notify)
new NoticeInfo(NewMailCond.id, this._mailBox);

// 數值類型數據 (變更後必須 RenewNotice 更新快照,再 Notify)
new NoticeInfo(CoinInWalletCond.id, this._coin);

重要 數值類型 (Value Type) 數據儲存的是快照,數據變更後必須透過 NoticeItem.RenewNotice 更新數據再 Notify,否則紅點不會刷新。