CoreFrames
Coding Style wiki
CoreFrames 是 CoreFrame 模組的統一呼叫入口(Facade),以巢狀靜態類提供 UIFrame(UI 視窗)、SRFrame(場景資源)、USFrame(Unity 場景)與 CPFrame(克隆 Prefab)四組介面,涵蓋介面物件與場景的預載、顯示、關閉、隱藏、載入與卸載,底層與 AssetLoader 連動引用計數管理。
| 命名空間 | OxGFrame.CoreFrame |
| 類型 | public static class |
| 原始碼 | CoreFrames.cs |
using OxGFrame.CoreFrame;
提醒 各子系統的管理器(UIManager、SRManager 等)會於首次呼叫時自動建立並常駐(DontDestroyOnLoad),不需事先於場景中建置。
注意 UIFrame 需在場景中存在與 UI Prefab 上 UISettings.canvasName 同名的 Canvas 物件,相關設定請參考 CoreFrame 介紹。
快速上手
// 顯示 UI(可同時傳遞資料給 UI 的 OnShow)
var ui = await CoreFrames.UIFrame.Show("PlayerUI");
// 關閉 UI
CoreFrames.UIFrame.Close("PlayerUI");
// 顯 示場景資源(SR)
await CoreFrames.SRFrame.Show("BattleField");
// 載入 Single 場景(無前綴 = Bundle 場景,使用 Address 名稱)
await CoreFrames.USFrame.LoadSingleSceneAsync("MainScene");
// 從 Build Settings 載入場景(build# 前綴)
await CoreFrames.USFrame.LoadSingleSceneAsync("build#MainScene");
// 克隆 Prefab(CP),不再使用時直接 Destroy 即可
var cp = await CoreFrames.CPFrame.LoadWithCloneAsync<CPBase>("BulletCP");
通用規則
名稱前綴解析
CoreFrames 內建解析器,依傳入名稱的前綴決定資源來源:
| 前綴 | 適用子系統 | 說明 | 範例 |
|---|---|---|---|
| res# | UIFrame、SRFrame、CPFrame | 從 Unity 原生 Resources 載入資源(依 Resources 相對路徑)。 | res#Prefabs/PlayerUI |
| build# | USFrame | 從 Build Settings 的 Scenes In Build 清單載入場景。 | build#MainScene |
| 無前綴 | 全部 | 預設從 Asset Bundle (YooAsset) 載入資源(直接使用可尋址名稱 Address)。 | PlayerUI |
資源包 (Package)
各載入方法皆提供 packageName 多載:
- 未指定
packageName:自動使用預設 Package(AssetPatcher.GetDefaultPackageName())。 - 指定
packageName:從指定的 Package 載入資源,適用於多 Package 分包管理。
群組 (groupId)
UIFrame 與 SRFrame 支援多群組管理:經由 Show 開啟的實例會記錄 groupId(如大廳群組 UIs、戰鬥群組 UIs),批次操作(CloseAll、HideAll、RevealAll、CheckHasAnyHiding)依 groupId 篩選作用範圍。框架內部常量定義如下:
| 常量 | 值 | 說明 |
|---|---|---|
| DEFAULT_GROUP_ID | 0 | 未指定 groupId 的多載,預設使用的群組 ID。 |
| DO_ALL_GROUPS | -1 | 將 groupId 傳入 -1 時,作用範圍擴及所有群組(等同 呼叫 ...ForAllGroups 系列方法)。 |
進度回呼 (Progression)
各載入方法的 progression 參數型別為 OxGFrame.AssetLoader.Progression:
public delegate void Progression(float progress, float currentCount, float totalCount);
progress:總進度(0 ~ 1)。currentCount/totalCount:目前完成數量與總數量。
關閉、隱藏與銷毀
- Close 走正規關閉流程(
OnPreClose→OnClose);Hide 僅停用物件並標記隱藏(觸發OnHide),之後可由 Reveal 還原顯示(觸發OnReveal)。已 Close 的物件無法 Reveal。 - Close 時是否銷毀實例取決於:呼叫端傳入
forceDestroy,或 Prefab 上勾選allowInstantiate(多實例)/onCloseAndDestroy(關閉即銷毀)。實例銷毀時將自動連動 AssetLoader 卸載資源(引用計數)。 - Prefab 上勾選 Exclude From Close All(
whenCloseAllToSkip)/Exclude From Hide All(whenHideAllToSkip)的物件,會被CloseAll/HideAll跳過;改用...AndExcluded系列方法可連同這些物件一併處理。
CoreFrames.UIFrame
UI 視窗的統一操作介面。管理所有 UI 視窗,支援 Group 多群組管理(如大廳群組 UIs、戰鬥群組 UIs)、Stack 堆疊管理(同節點內自動控制顯示排序)、反切(reverseChanges)與逐層關閉(allowCloseStackByStack)。UI 實例依 Prefab 上 UISettings 的 canvasName 與 nodeType,自動掛載至對應 Canvas 下的節點。
屬性
| 屬性 | 型別 | 預設值 | 說明 |
|---|---|---|---|
| ignoreTimeScale | bool | false | UI 系統的輪詢計時是否忽略 Time.timeScale 影響(改用未縮放時間)。 |
| enableUpdate | bool | true | 是否驅動 UI 的 OnUpdate 輪詢。 |
| enableFixedUpdate | bool | true | 是否驅動 UI 的 OnFixedUpdate 輪詢。 |
| enableLateUpdate | bool | true | 是否驅動 UI 的 OnLateUpdate 輪詢。 |
提醒 舊名稱 enabledUpdate / enabledFixedUpdate / enabledLateUpdate 仍以 [Obsolete] 轉發保留,建議改用新名稱。
方法總覽
初始化與 Canvas 環境
| 方法 | 說明 |
|---|---|
| InitInstance | 初始化 UIManager 單例實例。 |
| SetupAndCheckUICanvas | 依名稱查找 Canvas 物件,設置並檢查 UICanvas 環境。 |
| GetUICanvas | 依名稱取得 UICanvas 元件。 |
狀態查詢
| 方法 | 說明 |
|---|---|
| CheckIsShowing | 檢查指定 UI 是否為顯示狀態。 |
| CheckIsHiding | 檢查指定 UI 是否為隱藏(Hide)狀態。 |
| CheckHasAnyHiding | 檢查群組內是否有任一 UI 處於隱藏狀態。 |
| CheckHasAnyHidingForAllGroups | 檢查所有群組是否有任一 UI 處於隱藏狀態。 |
| GetStackByStackCount | 取得逐層關閉堆疊的目前數量。 |
元件存取
| 方法 | 說明 |
|---|---|
| GetComponent<T> | 取得指定 UI 的實例元件(堆疊最上層)。 |
| GetComponents<T> | 取得指定 UI 的所有實例元件。 |
資料刷新
| 方法 | 說明 |
|---|---|
| SendRefreshData | 向指定 UI 發送資料刷新通知。 |
| SendRefreshDataToAll | 向所有 UI 廣播資料刷新通知。 |
預載與顯示
| 方法 | 說明 |
|---|---|
| Preload | 預載 UI 資源至快取。 |
| Show | 載入並顯示 UI,回傳 UIBase 實例(支援泛型)。 |
關閉
| 方法 | 說明 |
|---|---|
| Close | 關閉指定 UI。 |
| CloseAll | 關閉群組內的所有 UI。 |
| CloseAllForAllGroups | 關閉所有群組的所有 UI。 |
| CloseAllAndExcluded | 關閉群組內所有 UI(連同勾選排除的一併關閉)。 |
| CloseAllAndExcludedForAllGroups | 關閉所有群組的所有 UI(連同勾選排除的一併關閉)。 |
| CloseStackByStack | 逐層關閉指定 Canvas 內最上層的 UI(LIFO)。 |
隱藏與顯現
| 方法 | 說明 |
|---|---|
| Reveal | 將 Hide 的 UI 重新顯現。 |
| RevealAll | 顯現群組內所有隱藏中的 UI。 |
| RevealAllForAllGroups | 顯現所有群組隱藏中的 UI。 |
| Hide | 隱藏指定 UI(保留實例與狀態)。 |
| HideAll | 隱藏群組內的所有 UI。 |
| HideAllForAllGroups | 隱藏所有群組的所有 UI。 |
| HideAllAndExcluded | 隱藏群組內所有 UI(連同勾選排除的一併隱藏)。 |
| HideAllAndExcludedForAllGroups | 隱藏所有群組的所有 UI(連同勾選排除的一併隱藏)。 |
InitInstance
public static void InitInstance()
說明
主動初始化 UIManager 單例實例。管理器物件會自動生成並常駐(DontDestroyOnLoad),建議於遊戲啟動階段呼叫一次,確保管理器提前就緒。
SetupAndCheckUICanvas
public static bool SetupAndCheckUICanvas(string canvasName)
參數
| 參數 | 型別 | 說明 |
|---|---|---|
| canvasName | string | Canvas 名稱(需與場景中的 Canvas 物件同名)。 |
回傳值
bool — 設置成功(或已設置過)回傳 true;場景中查無同名 Canvas 時輸出錯誤日誌並回傳 false。
說明
依名稱查找場景中的 Canvas 物件,設置並檢查 UICanvas 環境(自動建立 UIRoot、各 NodeType 節點與 Mask / Freeze 容器)。
提醒 Show 時會自動執行此流程;切換場景後可手動呼叫,提前建置 UI 環境。
GetUICanvas
public static UICanvas GetUICanvas(string canvasName)
參數
| 參數 | 型別 | 說明 |
|---|---|---|
| canvasName | string | Canvas 名稱。 |
回傳值
UICanvas — 名稱匹配的 UICanvas 元件;尚未設置環境或查無時回傳 null。
說明
依名稱取得已設置的 UICanvas,可進一步存取其 uiRoot、各 UI 節點與 Mask / Freeze 管理器。
CheckIsShowing
public static bool CheckIsShowing(string assetName)
public static bool CheckIsShowing(UIBase uiBase)
參數
| 參數 | 型別 | 說明 |
|---|---|---|
| assetName | string | UI 資源名稱。 |
| uiBase | UIBase | UI 實例元件。 |
回傳值
bool — 顯示中回傳 true;查無或未顯示回傳 false。
說明
檢查指定 UI 是否為顯示狀態。依名稱查詢時,以該 UI 堆疊最上層實例的顯示狀態為準。
CheckIsHiding
public static bool CheckIsHiding(string assetName)
public static bool CheckIsHiding(UIBase uiBase)
參數
| 參數 | 型別 | 說明 |
|---|---|---|
| assetName | string | UI 資源名稱。 |
| uiBase | UIBase | UI 實例元件。 |
回傳值
bool — 處於隱藏(Hide)狀態回傳 true;查無或非隱藏狀態回傳 false。
說明
檢查指定 UI 是否處於 Hide 造成的隱藏狀態(isHidden 標記)。經 Close 關閉的 UI 不屬於隱藏狀態。
CheckHasAnyHiding
public static bool CheckHasAnyHiding()
public static bool CheckHasAnyHiding(int groupId)
參數
| 參數 | 型別 | 說明 |
|---|---|---|
| groupId | int | 群組 ID。 預設值: 0(無參數多載) |
回傳值
bool — 群組內存在任一隱藏中的 UI 時回傳 true。
說明
檢查群組內是否有任一 UI 處於隱藏狀態。
CheckHasAnyHidingForAllGroups
public static bool CheckHasAnyHidingForAllGroups()
回傳值
bool — 任一群組存在隱藏中的 UI 時回傳 true。
說明
行為同 CheckHasAnyHiding,但檢查範圍為所有群組。
GetStackByStackCount
public static int GetStackByStackCount(string canvasName)
public static int GetStackByStackCount(int groupId, string canvasName)
參數
| 參數 | 型別 | 說明 |
|---|---|---|
| groupId | int | 群組 ID。 預設值: 0(未指定的多載) |
| canvasName | string | Canvas 名稱。 |
回傳值
int — 該群組 + Canvas 的逐層關閉堆疊目前數量;查無時回傳 0。
說明
取得逐層關閉堆疊的數量。僅計入啟用 allowCloseStackByStack 的 UI(經 Show 開啟時推入堆疊),搭配 CloseStackByStack 使用。
GetComponent<T>
public static T GetComponent<T>(string assetName) where T : UIBase
參數
| 參數 | 型別 | 說明 |
|---|---|---|
| assetName | string | UI 資源名稱。 |
回傳值
T — 該 UI 堆疊最上層的實例元件;查無時回傳 null。
說明
取得指定 UI 的實例元件,可轉為子類進行進階操作。
範例
var playerUI = CoreFrames.UIFrame.GetComponent<PlayerUI>("PlayerUI");
if (playerUI != null)
{
// 對實例進行進階操作
}
GetComponents<T>
public static T[] GetComponents<T>(string assetName) where T : UIBase
參數
| 參數 | 型別 | 說明 |
|---|---|---|
| assetName | string | UI 資源名稱。 |
回傳值
T[] — 該 UI 的所有實例元件陣列;查無時回傳空陣列。
說明
取得指定 UI 的所有實例元件。當 UI 勾選 allowInstantiate(多實例)同時存在複數實例時,可透過此方法批次取得。
SendRefreshData
public static void SendRefreshData(RefreshInfo refreshInfo)
public static void SendRefreshData(RefreshInfo[] refreshInfos)
參數
| 參數 | 型別 | 說明 |
|---|---|---|
| refreshInfo | RefreshInfo | 刷新資訊結構體 ,包含目標 UI 資源名稱與要傳遞的資料:new RefreshInfo(assetName, data)。 |
| refreshInfos | RefreshInfo[] | 刷新資訊陣列(批次通知多個 UI)。 |
說明
向指定 UI 的所有實例發送刷新通知,觸發其 OnReceiveAndRefresh(data)(顯示中或隱藏中的實例皆會收到)。常用於多語系切換刷新、接收伺服器資料後的顯示刷新(如儲值後刷新金額顯示)等。
範例
// 通知 PlayerUI 刷新金額顯示
CoreFrames.UIFrame.SendRefreshData(new RefreshInfo("PlayerUI", newCoinAmount));
SendRefreshDataToAll
public static void SendRefreshDataToAll()
public static void SendRefreshDataToAll(object data)
public static void SendRefreshDataToAll(RefreshInfo[] specificRefreshInfos)
public static void SendRefreshDataToAll(object data, RefreshInfo[] specificRefreshInfos)
參數
| 參數 | 型別 | 說明 |
|---|---|---|
| data | object | 廣播給所有 UI 的共用資料。 預設值: null(僅通知、不帶資料) |
| specificRefreshInfos | RefreshInfo[] | 特定名單。名單內的 UI 改用各自 RefreshInfo 中的資料,其餘 UI 使用共用 data。 |
說明
向所有 UI 廣播刷新通知,觸發各實例的 OnReceiveAndRefresh。常用於多語系切換時全 UI 刷新。
範例
// 切換語系後,通知所有 UI 刷新文字
CoreFrames.UIFrame.SendRefreshDataToAll();
Preload
public static async UniTask Preload(string assetName, uint priority = 0, Progression progression = null)
public static async UniTask Preload(string packageName, string assetName, uint priority = 0, Progression progression = null)
public static async UniTask Preload(string[] assetNames, uint priority = 0, Progression progression = null)
public static async UniTask Preload(string packageName, string[] assetNames, uint priority = 0, Progression progression = null)
參數
| 參數 | 型別 | 說明 |
|---|---|---|
| packageName | string | 資源包名稱。未指定時,使用預設 Package。 |
| assetName | string | UI 資源名稱(Bundle 資源使用 Address 名稱;支援 res# 前綴)。 |
| assetNames | string[] | UI 資源名稱陣列(批次預載)。 |
| priority | uint | 資源載入優先權。 預設值: 0 |
| progression | Progression | 載入進度回呼。 預設值: null |
回傳值
UniTask — 可等待的非同步操作。
說明
預先將 UI 資源載入至快取(不顯示)。之後呼叫 Show 時可直接取用,避免開啟當下產生載入延遲。
範例
// 批次預載常用 UI
await CoreFrames.UIFrame.Preload(new string[] { "PlayerUI", "SettingsUI" });
Show
public static async UniTask<UIBase> Show(string assetName, object data = null, string awaitingUIAssetName = null, uint priority = 0, Progression progression = null, Transform parent = null, float awaitingUIExtraDuration = 0f)
public static async UniTask<UIBase> Show(string packageName, string assetName, object data = null, string awaitingUIAssetName = null, uint priority = 0, Progression progression = null, Transform parent = null, float awaitingUIExtraDuration = 0f)
public static async UniTask<UIBase> Show(int groupId, string assetName, object data = null, string awaitingUIAssetName = null, uint priority = 0, Progression progression = null, Transform parent = null, float awaitingUIExtraDuration = 0f)
public static async UniTask<UIBase> Show(int groupId, string packageName, string assetName, object data = null, string awaitingUIAssetName = null, uint priority = 0, Progression progression = null, Transform parent = null, float awaitingUIExtraDuration = 0f)
public static async UniTask<T> Show<T>(string assetName, object data = null, string awaitingUIAssetName = null, uint priority = 0, Progression progression = null, Transform parent = null, float awaitingUIExtraDuration = 0f) where T : UIBase
public static async UniTask<T> Show<T>(string packageName, string assetName, object data = null, string awaitingUIAssetName = null, uint priority = 0, Progression progression = null, Transform parent = null, float awaitingUIExtraDuration = 0f) where T : UIBase
public static async UniTask<T> Show<T>(int groupId, string assetName, object data = null, string awaitingUIAssetName = null, uint priority = 0, Progression progression = null, Transform parent = null, float awaitingUIExtraDuration = 0f) where T : UIBase
public static async UniTask<T> Show<T>(int groupId, string packageName, string assetName, object data = null, string awaitingUIAssetName = null, uint priority = 0, Progression progression = null, Transform parent = null, float awaitingUIExtraDuration = 0f) where T : UIBase
參數
| 參數 | 型別 | 說明 |
|---|---|---|
| groupId | int | 群組 ID。 預設值: 0(未指定的多載) |
| packageName | string | 資源包名稱。未指定時,使用預設 Package。 |
| assetName | string | UI 資源名稱(Bundle 資源使用 Address 名稱;支援 res# 前綴)。 |
| data | object | 傳遞給 UI OnShow(obj) 的資料。預設值: null |
| awaitingUIAssetName | string | 過渡 UI 資源名稱。開啟主 UI 前先行顯示(如 Loading 遮罩),主 UI 開啟完成後自動關閉。 預設值: null(不使用過渡 UI) |
| priority | uint | 資源載入優先權。 預設值: 0 |
| progression | Progression | 載入進度回呼。 預設值: null |
| parent | Transform | 掛載的父節點。 預設值: null(依 uiSettings.nodeType 自動掛載至 UICanvas 下的對應節點) |
| awaitingUIExtraDuration | float | 過渡 UI 的額外停留秒數。 預設值: 0f |
回傳值
UniTask<UIBase> — 開啟的 UI 實例元件(泛型多載回傳 UniTask<T>);載入失敗(查無資源)時輸出錯誤日誌並回傳 null。
說明
載入並顯示 UI,同時記錄 groupId 供批次操作篩選。開啟流程會依序觸發 OnPreShow → OnShow。
- 同名 UI 已在顯示中且未勾選
allowInstantiate時,不會重複開啟,輸出警告並直接回傳既有實例。 - 啟用
reverseChanges(反切)的 UI 開啟時,會自動隱藏同 Canvas 反切堆疊中的前一個 UI;該 UI 關閉時自動還原前一個 UI 的顯示。
範例
// 開啟 UI 並傳遞資料
var ui = await CoreFrames.UIFrame.Show("PlayerUI", new PlayerData(100));
// 泛型開啟,直接取得子類
var playerUI = await CoreFrames.UIFrame.Show<PlayerUI>("PlayerUI");
// 指定群組與 Package 開啟
await CoreFrames.UIFrame.Show(1, "OtherPackage", "BattleUI");
// 開啟前先顯示過渡 UI(額外停留 0.5 秒)
await CoreFrames.UIFrame.Show("LobbyUI", null, "LoadingUI", awaitingUIExtraDuration: 0.5f);
Close
public static void Close(string assetName, bool disableOnPreClose = false, bool forceDestroy = false)
參數
| 參數 | 型別 | 說明 |
|---|---|---|
| assetName | string | UI 資源名稱。 |
| disableOnPreClose | bool | 是否略過 OnPreClose 回呼。預設值: false |
| forceDestroy | bool | 是否強制銷毀實例。未強制時,依 Prefab 上 allowInstantiate / onCloseAndDestroy 設定決定。預設值: false |
說明
關閉指定 UI(多實例時關閉堆疊最上層的實例)。UI 不在顯示狀態且未傳入 forceDestroy 時不動作。實例銷毀時將連動卸載資源(參考關閉、隱藏與銷毀)。
範例
// 一般關閉(依 Prefab 設定決定是否銷毀)
CoreFrames.UIFrame.Close("PlayerUI");
// 強制銷毀 + 略過 OnPreClose
CoreFrames.UIFrame.Close("PlayerUI", true, true);
CloseAll
public static void CloseAll(bool disableOnPreClose = false, bool forceDestroy = false, params string[] withoutAssetNames)
public static void CloseAll(int groupId, bool disableOnPreClose = false, bool forceDestroy = false, params string[] withoutAssetNames)
參數
| 參數 | 型別 | 說明 |
|---|---|---|
| groupId | int | 群組 ID。 預設值: 0(未指定的多載) |
| disableOnPreClose | bool | 是否略過 OnPreClose 回呼。預設值: false |
| forceDestroy | bool | 是否強制銷毀實例。 預設值: false |
| withoutAssetNames | params string[] | 排除名單。名單內的 UI 不執行關閉。 |
說明
關閉群組內的所有 UI(含每個 UI 的整疊實例)。
注意- 勾選 Exclude From Close All(
whenCloseAllToSkip)的 UI 會被跳過,需改用 CloseAllAndExcluded。 - 未顯示中的 UI 會被跳過(除非傳入
forceDestroy或該 UI 勾選allowInstantiate)。
範例
// 關閉預設群組所有 UI,但保留 MainMenuUI
CoreFrames.UIFrame.CloseAll(false, false, "MainMenuUI");
CloseAllForAllGroups
public static void CloseAllForAllGroups(bool disableOnPreClose = false, bool forceDestroy = false, params string[] withoutAssetNames)
參數
| 參數 | 型別 | 說明 |
|---|---|---|
| disableOnPreClose | bool | 是否略過 OnPreClose 回呼。預設值: false |
| forceDestroy | bool | 是否強制銷毀實例。 預設值: false |
| withoutAssetNames | params string[] | 排除名單。 |
說明
行為同 CloseAll,但作用範圍為所有群組。
CloseAllAndExcluded
public static void CloseAllAndExcluded(bool disableOnPreClose = false, bool forceDestroy = false, params string[] withoutAssetNames)
public static void CloseAllAndExcluded(int groupId, bool disableOnPreClose = false, bool forceDestroy = false, params string[] withoutAssetNames)
參數
| 參數 | 型別 | 說明 |
|---|---|---|
| groupId | int | 群組 ID。 預設值: 0(未指定的多載) |
| disableOnPreClose | bool | 是否略過 OnPreClose 回呼。預設值: false |
| forceDestroy | bool | 是否強制銷毀實例。 預設值: false |
| withoutAssetNames | params string[] | 排除名單(仍然有效)。 |
說明
行為同 CloseAll,但連同勾選 Exclude From Close All(whenCloseAllToSkip)的 UI 一併關閉。
CloseAllAndExcludedForAllGroups
public static void CloseAllAndExcludedForAllGroups(bool disableOnPreClose = false, bool forceDestroy = false, params string[] withoutAssetNames)
參數
| 參數 | 型別 | 說明 |
|---|---|---|
| disableOnPreClose | bool | 是否略過 OnPreClose 回呼。預設值: false |
| forceDestroy | bool | 是否強制銷毀實例。 預設值: false |
| withoutAssetNames | params string[] | 排除名單。 |
說明
行為同 CloseAllAndExcluded,但作用範圍為所有群組。
CloseStackByStack
public static void CloseStackByStack(string canvasName, bool disableOnPreClose = false, bool forceDestroy = false)
public static void CloseStackByStack(int groupId, string canvasName, bool disableOnPreClose = false, bool forceDestroy = false)
參數
| 參數 | 型別 | 說明 |
|---|---|---|
| groupId | int | 群組 ID。 預設值: 0(未指定的多載) |
| canvasName | string | Canvas 名稱。 |
| disableOnPreClose | bool | 是否略過 OnPreClose 回呼。預設值: false |
| forceDestroy | bool | 是否強制銷毀實例。 預設值: false |
說明
關閉指定群組 + Canvas 的逐層關閉堆疊中**最上層(最後開啟)**的 UI(LIFO 後進先出)。僅對啟用 allowCloseStackByStack 的 UI 有效,常用於實作返回鍵逐層關閉視窗。
範例
// 返回鍵:逐層關閉最上層 UI
if (CoreFrames.UIFrame.GetStackByStackCount("Canvas") > 0)
CoreFrames.UIFrame.CloseStackByStack("Canvas");
Reveal
public static void Reveal(string assetName)
參數
| 參數 | 型別 | 說明 |
|---|---|---|
| assetName | string | UI 資源名稱。 |
說明
將 Hide 的 UI 重新顯現,觸發 OnReveal(而非 OnShow)。僅對隱藏狀態的 UI 有效(經 Close 關閉的 UI 無法 Reveal);UI 已在顯示中時輸出警告。
RevealAll
public static void RevealAll()
public static void RevealAll(int groupId)
參數
| 參數 | 型別 | 說明 |
|---|---|---|
| groupId | int | 群組 ID。 預設值: 0(無參數多載) |
說明
顯現群組內所有處於隱藏狀態的 UI。
RevealAllForAllGroups
public static void RevealAllForAllGroups()
說明
行為同 RevealAll,但作用範圍為所有群組。
Hide
public static void Hide(string assetName)
參數
| 參數 | 型別 | 說明 |
|---|---|---|
| assetName | string | UI 資源名稱。 |
說明
隱藏指定 UI 的所有實例(僅停用物件並標記 isHidden,保留實例與資料狀態),觸發 OnHide。之後可由 Reveal 或 Show 還原顯示。
範例
// 暫時隱藏(保留狀態)
CoreFrames.UIFrame.Hide("PlayerUI");
// 重新顯現
CoreFrames.UIFrame.Reveal("PlayerUI");
HideAll
public static void HideAll(params string[] withoutAssetNames)
public static void HideAll(int groupId, params string[] withoutAssetNames)
參數
| 參數 | 型別 | 說明 |
|---|---|---|
| groupId | int | 群組 ID。 預設值: 0(未指定的多載) |
| withoutAssetNames | params string[] | 排除名單。名單內的 UI 不執行隱藏。 |
說明
隱藏群組內的所有 UI。
注意 勾選 Exclude From Hide All(whenHideAllToSkip)的 UI 會被跳過(若該 UI 啟用 reverseChanges 則仍會被隱藏),需改用 HideAllAndExcluded。
HideAllForAllGroups
public static void HideAllForAllGroups(params string[] withoutAssetNames)
參數
| 參數 | 型別 | 說明 |
|---|---|---|
| withoutAssetNames | params string[] | 排除名單。 |
說明
行為同 HideAll,但作用範圍為所有群組。
HideAllAndExcluded
public static void HideAllAndExcluded(params string[] withoutAssetNames)
public static void HideAllAndExcluded(int groupId, params string[] withoutAssetNames)
參數
| 參數 | 型別 | 說明 |
|---|---|---|
| groupId | int | 群組 ID。 預設值: 0(未指定的多載) |
| withoutAssetNames | params string[] | 排除名單(仍然有效)。 |
說明
行為同 HideAll,但連同勾選 Exclude From Hide All(whenHideAllToSkip)的 UI 一併隱藏。
HideAllAndExcludedForAllGroups
public static void HideAllAndExcludedForAllGroups(params string[] withoutAssetNames)
參數
| 參數 | 型別 | 說明 |
|---|---|---|
| withoutAssetNames | params string[] | 排除名單。 |
說明
行為同 HideAllAndExcluded,但作用範圍為所有群組。
CoreFrames.SRFrame
場景資源(Scene Resource)的統一操作介面。用於管理場景中的 3D 資源(如 NPC、建築、特效物件、場中需求的管理元件、AudioListener 等),操作邏輯與 UIFrame 相似(群組管理、Show / Close / Hide / Reveal、資料刷新),但不涉及 Canvas 節點與堆疊排序機制。實例預設掛載於 SRManager 節點下。
屬性
| 屬性 | 型別 | 預設值 | 說明 |
|---|---|---|---|
| ignoreTimeScale | bool | false | SR 系統的輪詢計時是否忽略 Time.timeScale 影響(改用未縮放時間)。 |
| enableUpdate | bool | true | 是否驅動 SR 的 OnUpdate 輪詢。 |
| enableFixedUpdate | bool | true | 是否驅動 SR 的 OnFixedUpdate 輪詢。 |
| enableLateUpdate | bool | true | 是否驅動 SR 的 OnLateUpdate 輪詢。 |
提醒 舊名稱 enabledUpdate / enabledFixedUpdate / enabledLateUpdate 仍以 [Obsolete] 轉發保留,建議改用新名稱。
方法總覽
初始化
| 方法 | 說明 |
|---|---|
| InitInstance | 初始化 SRManager 單例實例。 |
狀態查詢
| 方法 | 說明 |
|---|---|
| CheckIsShowing | 檢查指定 SR 是否為顯示狀態。 |
| CheckIsHiding | 檢查指定 SR 是否為隱藏(Hide)狀態。 |
| CheckHasAnyHiding | 檢查群組內是否有任一 SR 處於隱藏狀態。 |
| CheckHasAnyHidingForAllGroups | 檢查所有群組是否有任一 SR 處於隱藏狀態。 |
元件存取
| 方法 | 說明 |
|---|---|
| GetComponent<T> | 取得指定 SR 的實例元件(堆疊最上層)。 |
| GetComponents<T> | 取得指定 SR 的所有實例元件。 |
資料刷新
| 方法 | 說明 |
|---|---|
| SendRefreshData | 向指定 SR 發送資料刷新通知。 |
| SendRefreshDataToAll | 向所有 SR 廣播資料刷新通知。 |