跳到主要内容
版本:v3

CoreFrames

重要 注意 提醒

Coding Style wiki


CoreFramesCoreFrame 模块的统一调用入口(Facade),以嵌套静态类提供 UIFrame(UI 窗口)、SRFrame(场景资源)、USFrame(Unity 场景)与 CPFrame(克隆 Prefab)四组接口,涵盖界面对象与场景的预加载、显示、关闭、隐藏、加载与卸载,底层与 AssetLoader 联动引用计数管理。

命名空间OxGFrame.CoreFrame
类型public static class
源码CoreFrames.cs
using OxGFrame.CoreFrame;

提醒 各子系统的管理器(UIManagerSRManager 等)会在首次调用时自动创建并常驻(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#USFrameBuild Settings 的 Scenes In Build 列表加载场景。build#MainScene
无前缀全部默认从 Asset Bundle (YooAsset) 加载资源(直接使用可寻址名称 Address)。PlayerUI

资源包 (Package)

各加载方法皆提供 packageName 重载:

  • 未指定 packageName:自动使用默认 Package(AssetPatcher.GetDefaultPackageName())。
  • 指定 packageName:从指定的 Package 加载资源,适用于多 Package 分包管理。

群组 (groupId)

UIFrameSRFrame 支持多群组管理:通过 Show 打开的实例会记录 groupId(如大厅群组 UIs、战斗群组 UIs),批量操作(CloseAllHideAllRevealAllCheckHasAnyHiding)依 groupId 筛选作用范围。框架内部常量定义如下:

常量说明
DEFAULT_GROUP_ID0未指定 groupId 的重载,默认使用的群组 ID。
DO_ALL_GROUPS-1groupId 传入 -1 时,作用范围扩及所有群组(等同调用 ...ForAllGroups 系列方法)。

进度回调 (Progression)

各加载方法的 progression 参数类型为 OxGFrame.AssetLoader.Progression

public delegate void Progression(float progress, float currentCount, float totalCount);
  • progress:总进度(0 ~ 1)。
  • currentCount / totalCount:当前完成数量与总数量。

关闭、隐藏与销毁

  • Close 走正规关闭流程(OnPreCloseOnClose);Hide 仅禁用对象并标记隐藏(触发 OnHide),之后可由 Reveal 恢复显示(触发 OnReveal)。已 Close 的对象无法 Reveal。
  • Close 时是否销毁实例取决于:调用端传入 forceDestroy,或 Prefab 上勾选 allowInstantiate(多实例)/onCloseAndDestroy(关闭即销毁)。实例销毁时将自动联动 AssetLoader 卸载资源(引用计数)。
  • Prefab 上勾选 Exclude From Close AllwhenCloseAllToSkip)/Exclude From Hide AllwhenHideAllToSkip)的对象,会被 CloseAll / HideAll 跳过;改用 ...AndExcluded 系列方法可连同这些对象一并处理。

CoreFrames.UIFrame

UI 窗口的统一操作接口。管理所有 UI 窗口,支持 Group 多群组管理(如大厅群组 UIs、战斗群组 UIs)、Stack 堆栈管理(同节点内自动控制显示排序)、反切(reverseChanges)与逐层关闭(allowCloseStackByStack)。UI 实例依 Prefab 上 UISettingscanvasNamenodeType,自动挂载至对应 Canvas 下的节点。

属性

属性类型默认值说明
ignoreTimeScaleboolfalseUI 系统的轮询计时是否忽略 Time.timeScale 影响(改用未缩放时间)。
enableUpdatebooltrue是否驱动 UI 的 OnUpdate 轮询。
enableFixedUpdatebooltrue是否驱动 UI 的 OnFixedUpdate 轮询。
enableLateUpdatebooltrue是否驱动 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)

参数

参数类型说明
canvasNamestringCanvas 名称(需与场景中的 Canvas 对象同名)。

返回值

bool — 设置成功(或已设置过)返回 true;场景中未找到同名 Canvas 时输出错误日志并返回 false

说明

依名称查找场景中的 Canvas 对象,设置并检查 UICanvas 环境(自动创建 UIRoot、各 NodeType 节点与 Mask / Freeze 容器)。

提醒 Show 时会自动执行此流程;切换场景后可手动调用,提前创建 UI 环境。


GetUICanvas

public static UICanvas GetUICanvas(string canvasName)

参数

参数类型说明
canvasNamestringCanvas 名称。

返回值

UICanvas — 名称匹配的 UICanvas 组件;尚未设置环境或未找到时返回 null

说明

依名称获取已设置的 UICanvas,可进一步访问其 uiRoot、各 UI 节点与 Mask / Freeze 管理器。


CheckIsShowing

public static bool CheckIsShowing(string assetName)
public static bool CheckIsShowing(UIBase uiBase)

参数

参数类型说明
assetNamestringUI 资源名称。
uiBaseUIBaseUI 实例组件。

返回值

bool — 显示中返回 true;未找到或未显示返回 false

说明

检查指定 UI 是否为显示状态。依名称查询时,以该 UI 堆栈最上层实例的显示状态为准。


CheckIsHiding

public static bool CheckIsHiding(string assetName)
public static bool CheckIsHiding(UIBase uiBase)

参数

参数类型说明
assetNamestringUI 资源名称。
uiBaseUIBaseUI 实例组件。

返回值

bool — 处于隐藏(Hide)状态返回 true;未找到或非隐藏状态返回 false

说明

检查指定 UI 是否处于 Hide 造成的隐藏状态(isHidden 标记)。经 Close 关闭的 UI 不属于隐藏状态。


CheckHasAnyHiding

public static bool CheckHasAnyHiding()
public static bool CheckHasAnyHiding(int groupId)

参数

参数类型说明
groupIdint群组 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)

参数

参数类型说明
groupIdint群组 ID。
默认值0(未指定的重载)
canvasNamestringCanvas 名称。

返回值

int — 该群组 + Canvas 的逐层关闭堆栈当前数量;未找到时返回 0

说明

获取逐层关闭堆栈的数量。仅计入启用 allowCloseStackByStack 的 UI(经 Show 打开时推入堆栈),搭配 CloseStackByStack 使用。


GetComponent<T>

public static T GetComponent<T>(string assetName) where T : UIBase

参数

参数类型说明
assetNamestringUI 资源名称。

返回值

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

参数

参数类型说明
assetNamestringUI 资源名称。

返回值

T[] — 该 UI 的所有实例组件数组;未找到时返回空数组。

说明

获取指定 UI 的所有实例组件。当 UI 勾选 allowInstantiate(多实例)同时存在多个实例时,可通过此方法批量获取。


SendRefreshData

public static void SendRefreshData(RefreshInfo refreshInfo)
public static void SendRefreshData(RefreshInfo[] refreshInfos)

参数

参数类型说明
refreshInfoRefreshInfo刷新信息结构体,包含目标 UI 资源名称与要传递的数据:new RefreshInfo(assetName, data)
refreshInfosRefreshInfo[]刷新信息数组(批量通知多个 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)

参数

参数类型说明
dataobject广播给所有 UI 的共用数据。
默认值null(仅通知、不带数据)
specificRefreshInfosRefreshInfo[]特定名单。名单内的 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)

参数

参数类型说明
packageNamestring资源包名称。未指定时,使用默认 Package。
assetNamestringUI 资源名称(Bundle 资源使用 Address 名称;支持 res# 前缀)。
assetNamesstring[]UI 资源名称数组(批量预加载)。
priorityuint资源加载优先级。
默认值0
progressionProgression加载进度回调。
默认值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

参数

参数类型说明
groupIdint群组 ID。
默认值0(未指定的重载)
packageNamestring资源包名称。未指定时,使用默认 Package。
assetNamestringUI 资源名称(Bundle 资源使用 Address 名称;支持 res# 前缀)。
dataobject传递给 UI OnShow(obj) 的数据。
默认值null
awaitingUIAssetNamestring过渡 UI 资源名称。打开主 UI 前先行显示(如 Loading 遮罩),主 UI 打开完成后自动关闭。
默认值null(不使用过渡 UI)
priorityuint资源加载优先级。
默认值0
progressionProgression加载进度回调。
默认值null
parentTransform挂载的父节点。
默认值null(依 uiSettings.nodeType 自动挂载至 UICanvas 下的对应节点)
awaitingUIExtraDurationfloat过渡 UI 的额外停留秒数。
默认值0f

返回值

UniTask<UIBase> — 打开的 UI 实例组件(泛型重载返回 UniTask<T>);加载失败(未找到资源)时输出错误日志并返回 null

说明

加载并显示 UI,同时记录 groupId 供批量操作筛选。打开流程会依序触发 OnPreShowOnShow

注意
  • 同名 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)

参数

参数类型说明
assetNamestringUI 资源名称。
disableOnPreClosebool是否跳过 OnPreClose 回调。
默认值false
forceDestroybool是否强制销毁实例。未强制时,依 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)

参数

参数类型说明
groupIdint群组 ID。
默认值0(未指定的重载)
disableOnPreClosebool是否跳过 OnPreClose 回调。
默认值false
forceDestroybool是否强制销毁实例。
默认值false
withoutAssetNamesparams string[]排除名单。名单内的 UI 不执行关闭。

说明

关闭群组内的所有 UI(含每个 UI 的整个堆栈实例)。

注意
  • 勾选 Exclude From Close AllwhenCloseAllToSkip)的 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)

参数

参数类型说明
disableOnPreClosebool是否跳过 OnPreClose 回调。
默认值false
forceDestroybool是否强制销毁实例。
默认值false
withoutAssetNamesparams 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)

参数

参数类型说明
groupIdint群组 ID。
默认值0(未指定的重载)
disableOnPreClosebool是否跳过 OnPreClose 回调。
默认值false
forceDestroybool是否强制销毁实例。
默认值false
withoutAssetNamesparams string[]排除名单(仍然有效)。

说明

行为同 CloseAll,但连同勾选 Exclude From Close AllwhenCloseAllToSkip)的 UI 一并关闭。


CloseAllAndExcludedForAllGroups

public static void CloseAllAndExcludedForAllGroups(bool disableOnPreClose = false, bool forceDestroy = false, params string[] withoutAssetNames)

参数

参数类型说明
disableOnPreClosebool是否跳过 OnPreClose 回调。
默认值false
forceDestroybool是否强制销毁实例。
默认值false
withoutAssetNamesparams 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)

参数

参数类型说明
groupIdint群组 ID。
默认值0(未指定的重载)
canvasNamestringCanvas 名称。
disableOnPreClosebool是否跳过 OnPreClose 回调。
默认值false
forceDestroybool是否强制销毁实例。
默认值false

说明

关闭指定群组 + Canvas 的逐层关闭堆栈中**最上层(最后打开)**的 UI(LIFO 后进先出)。仅对启用 allowCloseStackByStack 的 UI 有效,常用于实现返回键逐层关闭窗口。

示例

// 返回键:逐层关闭最上层 UI
if (CoreFrames.UIFrame.GetStackByStackCount("Canvas") > 0)
CoreFrames.UIFrame.CloseStackByStack("Canvas");

Reveal

public static void Reveal(string assetName)

参数

参数类型说明
assetNamestringUI 资源名称。

说明

Hide 的 UI 重新显现,触发 OnReveal(而非 OnShow)。仅对隐藏状态的 UI 有效(经 Close 关闭的 UI 无法 Reveal);UI 已在显示中时输出警告。


RevealAll

public static void RevealAll()
public static void RevealAll(int groupId)

参数

参数类型说明
groupIdint群组 ID。
默认值0(无参数重载)

说明

显现群组内所有处于隐藏状态的 UI。


RevealAllForAllGroups

public static void RevealAllForAllGroups()

说明

行为同 RevealAll,但作用范围为所有群组


Hide

public static void Hide(string assetName)

参数

参数类型说明
assetNamestringUI 资源名称。

说明

隐藏指定 UI 的所有实例(仅禁用对象并标记 isHidden,保留实例与数据状态),触发 OnHide。之后可由 RevealShow 恢复显示。

示例

// 暂时隐藏(保留状态)
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)

参数

参数类型说明
groupIdint群组 ID。
默认值0(未指定的重载)
withoutAssetNamesparams string[]排除名单。名单内的 UI 不执行隐藏。

说明

隐藏群组内的所有 UI

注意 勾选 Exclude From Hide AllwhenHideAllToSkip)的 UI 会被跳过(若该 UI 启用 reverseChanges 则仍会被隐藏),需改用 HideAllAndExcluded


HideAllForAllGroups

public static void HideAllForAllGroups(params string[] withoutAssetNames)

参数

参数类型说明
withoutAssetNamesparams string[]排除名单。

说明

行为同 HideAll,但作用范围为所有群组


HideAllAndExcluded

public static void HideAllAndExcluded(params string[] withoutAssetNames)
public static void HideAllAndExcluded(int groupId, params string[] withoutAssetNames)

参数

参数类型说明
groupIdint群组 ID。
默认值0(未指定的重载)
withoutAssetNamesparams string[]排除名单(仍然有效)。

说明

行为同 HideAll,但连同勾选 Exclude From Hide AllwhenHideAllToSkip)的 UI 一并隐藏。


HideAllAndExcludedForAllGroups

public static void HideAllAndExcludedForAllGroups(params string[] withoutAssetNames)

参数

参数类型说明
withoutAssetNamesparams string[]排除名单。

说明

行为同 HideAllAndExcluded,但作用范围为所有群组


CoreFrames.SRFrame

场景资源(Scene Resource)的统一操作接口。用于管理场景中的 3D 资源(如 NPC、建筑、特效对象、场中需求的管理组件、AudioListener 等),操作逻辑与 UIFrame 相似(群组管理、Show / Close / Hide / Reveal、数据刷新),但不涉及 Canvas 节点与堆栈排序机制。实例默认挂载于 SRManager 节点下。

属性

属性类型默认值说明
ignoreTimeScaleboolfalseSR 系统的轮询计时是否忽略 Time.timeScale 影响(改用未缩放时间)。
enableUpdatebooltrue是否驱动 SR 的 OnUpdate 轮询。
enableFixedUpdatebooltrue是否驱动 SR 的 OnFixedUpdate 轮询。
enableLateUpdatebooltrue是否驱动 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 广播数据刷新通知。

预加载与显示

方法说明
Preload预加载 SR 资源至缓存。
Show加载并显示 SR,返回 SRBase 实例(支持泛型)。

关闭

方法说明
Close关闭指定 SR。
CloseAll关闭群组内的所有 SR。
CloseAllForAllGroups关闭所有群组的所有 SR。
CloseAllAndExcluded关闭群组内所有 SR(连同勾选排除的一并关闭)。
CloseAllAndExcludedForAllGroups关闭所有群组的所有 SR(连同勾选排除的一并关闭)。

隐藏与显现

方法说明
Reveal将 Hide 的 SR 重新显现。
RevealAll显现群组内所有隐藏中的 SR。
RevealAllForAllGroups显现所有群组隐藏中的 SR。
Hide隐藏指定 SR(保留实例与状态)。
HideAll隐藏群组内的所有 SR。
HideAllForAllGroups隐藏所有群组的所有 SR。
HideAllAndExcluded隐藏群组内所有 SR(连同勾选排除的一并隐藏)。
HideAllAndExcludedForAllGroups隐藏所有群组的所有 SR(连同勾选排除的一并隐藏)。

InitInstance

public static void InitInstance()

说明

主动初始化 SRManager 单例实例。管理器对象会自动创建并常驻(DontDestroyOnLoad),建议在游戏启动阶段调用一次,确保管理器提前就绪。


CheckIsShowing

public static bool CheckIsShowing(string assetName)
public static bool CheckIsShowing(SRBase srBase)

参数

参数类型说明
assetNamestringSR 资源名称。
srBaseSRBaseSR 实例组件。

返回值

bool — 显示中返回 true;未找到或未显示返回 false

说明

检查指定 SR 是否为显示状态。依名称查询时,以该 SR 堆栈最上层实例的显示状态为准。


CheckIsHiding

public static bool CheckIsHiding(string assetName)
public static bool CheckIsHiding(SRBase srBase)

参数

参数类型说明
assetNamestringSR 资源名称。
srBaseSRBaseSR 实例组件。

返回值

bool — 处于隐藏(Hide)状态返回 true;未找到或非隐藏状态返回 false

说明

检查指定 SR 是否处于 Hide 造成的隐藏状态(isHidden 标记)。经 Close 关闭的 SR 不属于隐藏状态。


CheckHasAnyHiding

public static bool CheckHasAnyHiding()
public static bool CheckHasAnyHiding(int groupId)

参数

参数类型说明
groupIdint群组 ID。
默认值0(无参数重载)

返回值

bool — 群组内存在任一隐藏中的 SR 时返回 true

说明

检查群组内是否有任一 SR 处于隐藏状态。


CheckHasAnyHidingForAllGroups

public static bool CheckHasAnyHidingForAllGroups()

返回值

bool — 任一群组存在隐藏中的 SR 时返回 true

说明

行为同 CheckHasAnyHiding,但检查范围为所有群组


GetComponent<T>

public static T GetComponent<T>(string assetName) where T : SRBase

参数

参数类型说明
assetNamestringSR 资源名称。

返回值

T — 该 SR 堆栈最上层的实例组件;未找到时返回 null

说明

获取指定 SR 的实例组件,可转为子类进行高级操作。

示例

var battleField = CoreFrames.SRFrame.GetComponent<BattleFieldSR>("BattleField");

GetComponents<T>

public static T[] GetComponents<T>(string assetName) where T : SRBase

参数

参数类型说明
assetNamestringSR 资源名称。

返回值

T[] — 该 SR 的所有实例组件数组;未找到时返回空数组。

说明

获取指定 SR 的所有实例组件。当 SR 勾选 allowInstantiate(多实例)同时存在多个实例时,可通过此方法批量获取。


SendRefreshData

public static void SendRefreshData(RefreshInfo refreshInfo)
public static void SendRefreshData(RefreshInfo[] refreshInfos)

参数

参数类型说明
refreshInfoRefreshInfo刷新信息结构体,包含目标 SR 资源名称与要传递的数据:new RefreshInfo(assetName, data)
refreshInfosRefreshInfo[]刷新信息数组(批量通知多个 SR)。

说明

向指定 SR 的所有实例发送刷新通知,触发其 OnReceiveAndRefresh(data)(显示中或隐藏中的实例皆会收到)。


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)

参数

参数类型说明
dataobject广播给所有 SR 的共用数据。
默认值null(仅通知、不带数据)
specificRefreshInfosRefreshInfo[]特定名单。名单内的 SR 改用各自 RefreshInfo 中的数据,其余 SR 使用共用 data

说明

所有 SR 广播刷新通知,触发各实例的 OnReceiveAndRefresh


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)

参数

参数类型说明
packageNamestring资源包名称。未指定时,使用默认 Package。
assetNamestringSR 资源名称(Bundle 资源使用 Address 名称;支持 res# 前缀)。
assetNamesstring[]SR 资源名称数组(批量预加载)。
priorityuint资源加载优先级。
默认值0
progressionProgression加载进度回调。
默认值null

返回值

UniTask — 可等待的异步操作。

说明

预先将 SR 资源加载至缓存(不显示)。之后调用 Show 时可直接取用,避免显示当下产生加载延迟,优化运行性能。

示例

await CoreFrames.SRFrame.Preload("BattleField");

Show

public static async UniTask<SRBase> 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<SRBase> 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<SRBase> 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<SRBase> 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 : SRBase
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 : SRBase
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 : SRBase
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 : SRBase

参数

参数类型说明
groupIdint群组 ID。
默认值0(未指定的重载)
packageNamestring资源包名称。未指定时,使用默认 Package。
assetNamestringSR 资源名称(Bundle 资源使用 Address 名称;支持 res# 前缀)。
dataobject传递给 SR OnShow(obj) 的数据。
默认值null
awaitingUIAssetNamestring过渡 UI 资源名称(属于 UIFrame 的 UI)。打开 SR 前先行显示,SR 打开完成后自动关闭。
默认值null(不使用过渡 UI)
priorityuint资源加载优先级。
默认值0
progressionProgression加载进度回调。
默认值null
parentTransform挂载的父节点。
默认值null(挂载至 SRManager 节点下)
awaitingUIExtraDurationfloat过渡 UI 的额外停留秒数。
默认值0f

返回值

UniTask<SRBase> — 打开的 SR 实例组件(泛型重载返回 UniTask<T>);加载失败(未找到资源)时输出错误日志并返回 null

说明

加载并显示场景资源,同时记录 groupId 供批量操作筛选。打开流程会依序触发 OnPreShowOnShow

注意 同名 SR 已在显示中且未勾选 allowInstantiate 时,不会重复打开,输出警告并直接返回现有实例。

示例

// 显示场景资源
var sr = await CoreFrames.SRFrame.Show("BattleField");

// 泛型打开并指定父节点
var npc = await CoreFrames.SRFrame.Show<NpcSR>("VillageNpc", parent: npcRoot);

// 指定群组打开
await CoreFrames.SRFrame.Show(2, "BattleEffects");

Close

public static void Close(string assetName, bool disableOnPreClose = false, bool forceDestroy = false)

参数

参数类型说明
assetNamestringSR 资源名称。
disableOnPreClosebool是否跳过 OnPreClose 回调。
默认值false
forceDestroybool是否强制销毁实例。未强制时,依 Prefab 上 allowInstantiate / onCloseAndDestroy 设置决定。
默认值false

说明

关闭指定 SR(多实例时关闭堆栈最上层的实例)。SR 不在显示状态且未传入 forceDestroy 时不动作。实例销毁时将联动卸载资源(参考关闭、隐藏与销毁)。

示例

CoreFrames.SRFrame.Close("BattleField");

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)

参数

参数类型说明
groupIdint群组 ID。
默认值0(未指定的重载)
disableOnPreClosebool是否跳过 OnPreClose 回调。
默认值false
forceDestroybool是否强制销毁实例。
默认值false
withoutAssetNamesparams string[]排除名单。名单内的 SR 不执行关闭。

说明

关闭群组内的所有 SR(含每个 SR 的整个堆栈实例)。

注意
  • 勾选 Exclude From Close AllwhenCloseAllToSkip)的 SR 会被跳过,需改用 CloseAllAndExcluded
  • 未显示中的 SR 会被跳过(除非传入 forceDestroy)。

CloseAllForAllGroups

public static void CloseAllForAllGroups(bool disableOnPreClose = false, bool forceDestroy = false, params string[] withoutAssetNames)

参数

参数类型说明
disableOnPreClosebool是否跳过 OnPreClose 回调。
默认值false
forceDestroybool是否强制销毁实例。
默认值false
withoutAssetNamesparams 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)

参数

参数类型说明
groupIdint群组 ID。
默认值0(未指定的重载)
disableOnPreClosebool是否跳过 OnPreClose 回调。
默认值false
forceDestroybool是否强制销毁实例。
默认值false
withoutAssetNamesparams string[]排除名单(仍然有效)。

说明

行为同 CloseAll,但连同勾选 Exclude From Close AllwhenCloseAllToSkip)的 SR 一并关闭。


CloseAllAndExcludedForAllGroups

public static void CloseAllAndExcludedForAllGroups(bool disableOnPreClose = false, bool forceDestroy = false, params string[] withoutAssetNames)

参数

参数类型说明
disableOnPreClosebool是否跳过 OnPreClose 回调。
默认值false
forceDestroybool是否强制销毁实例。
默认值false
withoutAssetNamesparams string[]排除名单。

说明

行为同 CloseAllAndExcluded,但作用范围为所有群组


Reveal

public static void Reveal(string assetName)

参数

参数类型说明
assetNamestringSR 资源名称。

说明

Hide 的 SR 重新显现,触发 OnReveal(而非 OnShow)。仅对隐藏状态的 SR 有效(经 Close 关闭的 SR 无法 Reveal);SR 已在显示中时输出警告。


RevealAll

public static void RevealAll()
public static void RevealAll(int groupId)

参数

参数类型说明
groupIdint群组 ID。
默认值0(无参数重载)

说明

显现群组内所有处于隐藏状态的 SR。


RevealAllForAllGroups

public static void RevealAllForAllGroups()

说明

行为同 RevealAll,但作用范围为所有群组


Hide

public static void Hide(string assetName)

参数

参数类型说明
assetNamestringSR 资源名称。

说明

隐藏指定 SR 的所有实例(仅禁用对象并标记 isHidden,保留实例与数据状态),触发 OnHide。之后可由 RevealShow 恢复显示。

示例

// 暂时隐藏场景资源(保留状态)
CoreFrames.SRFrame.Hide("BattleField");

// 重新显现
CoreFrames.SRFrame.Reveal("BattleField");

HideAll

public static void HideAll(params string[] withoutAssetNames)
public static void HideAll(int groupId, params string[] withoutAssetNames)

参数

参数类型说明
groupIdint群组 ID。
默认值0(未指定的重载)
withoutAssetNamesparams string[]排除名单。名单内的 SR 不执行隐藏。

说明

隐藏群组内的所有 SR

注意 勾选 Exclude From Hide AllwhenHideAllToSkip)的 SR 会被跳过,需改用 HideAllAndExcluded


HideAllForAllGroups

public static void HideAllForAllGroups(params string[] withoutAssetNames)

参数

参数类型说明
withoutAssetNamesparams string[]排除名单。

说明

行为同 HideAll,但作用范围为所有群组


HideAllAndExcluded

public static void HideAllAndExcluded(params string[] withoutAssetNames)
public static void HideAllAndExcluded(int groupId, params string[] withoutAssetNames)

参数

参数类型说明
groupIdint群组 ID。
默认值0(未指定的重载)
withoutAssetNamesparams string[]排除名单(仍然有效)。

说明

行为同 HideAll,但连同勾选 Exclude From Hide AllwhenHideAllToSkip)的 SR 一并隐藏。


HideAllAndExcludedForAllGroups

public static void HideAllAndExcludedForAllGroups(params string[] withoutAssetNames)

参数

参数类型说明
withoutAssetNamesparams string[]排除名单。

说明

行为同 HideAllAndExcluded,但作用范围为所有群组


CoreFrames.USFrame

Unity 场景(Unity Scene)的统一操作接口。增强型场景管理系统,封装 Unity 原生 SceneManager 的功能并扩展 Bundle 场景支持,支持 Single / Additive 多场景加载、主场景 + 子场景组合加载、进度合并上报、分帧激活根对象与场景卸载。

提醒 场景名称支持 build# 前缀:有前缀时从 Build Settings 加载,无前缀时从 Asset Bundle (YooAsset) 加载(参考名称前缀解析)。

方法总览

初始化与场景查询

方法说明
InitInstance初始化 USManager 单例实例。
SceneCount获取当前已加载的场景数量。
GetActiveScene获取当前的活动场景。
GetSceneAt依索引获取已加载的场景。
GetSceneByName依名称获取已加载的场景。
GetSceneByBuildIndex依 Build Index 获取已加载的场景。
GetAllScenes获取所有(或筛选后的)已加载场景。

场景操作

方法说明
CreateScene创建新的空场景。
MergeScenes合并两个场景。
MoveGameObjectToScene将 GameObject 移动至指定场景。
MoveGameObjectToActiveScene将 GameObject 移动至活动场景。
SetActiveScene设置活动场景。
SetActiveSceneRootGameObjects批量设置场景根对象的 Active 状态。
SetActiveSceneRootGameObjectsAsync分帧批量设置场景根对象的 Active 状态。

场景加载(异步)

方法说明
LoadSingleSceneAsync以 Single 模式异步加载场景。
LoadAdditiveSceneAsync以 Additive 模式异步加载场景。
LoadMainAndSubScenesAsync一次加载一个主场景与多个子场景(进度自动合并)。
LoadSubScenesAsync批量加载多个 Additive 子场景(进度自动合并)。
LoadSceneAsync通用异步加载场景(自行指定 LoadSceneMode)。

场景加载(同步)

方法说明
LoadSingleScene以 Single 模式同步加载场景。
LoadAdditiveScene以 Additive 模式同步加载场景。
LoadMainAndSubScenes一次加载一个主场景与多个子场景(同步)。
LoadSubScenes批量加载多个 Additive 子场景(同步)。
LoadScene通用同步加载场景(自行指定 LoadSceneMode)。

卸载

方法说明
Unload卸载指定场景(依名称或 Build Index)。

InitInstance

public static void InitInstance()

说明

主动初始化 USManager 单例实例(纯 C# 单例,非 MonoBehaviour),建议在游戏启动阶段调用一次。


SceneCount

public static int SceneCount()

返回值

int — 当前已加载的场景数量(等同 SceneManager.sceneCount)。

说明

获取当前已加载的场景数量。


GetActiveScene

public static Scene GetActiveScene()

返回值

Scene — 当前的活动场景(等同 SceneManager.GetActiveScene())。

说明

获取当前的活动场景(Active Scene)。


GetSceneAt

public static Scene GetSceneAt(int index)

参数

参数类型说明
indexint已加载场景列表中的索引(0 ~ SceneCount - 1)。

返回值

Scene — 对应索引的场景。

说明

依索引获取已加载的场景(等同 SceneManager.GetSceneAt)。


GetSceneByName

public static Scene GetSceneByName(string sceneName)

参数

参数类型说明
sceneNamestring场景名称。

返回值

Scene — 名称匹配的已加载场景;未找到时返回的 Scene 为无效场景(IsValid()false)。

说明

依名称获取已加载的场景(等同 SceneManager.GetSceneByName)。


GetSceneByBuildIndex

public static Scene GetSceneByBuildIndex(int buildIndex)

参数

参数类型说明
buildIndexintBuild Settings 中的场景索引。

返回值

Scene — 对应 Build Index 的已加载场景;未加载时返回的 Scene 为无效场景。

说明

依 Build Index 获取已加载的场景(等同 SceneManager.GetSceneByBuildIndex)。


GetAllScenes

public static Scene[] GetAllScenes(params string[] sceneNames)
public static Scene[] GetAllScenes(params int[] buildIndexes)

参数

参数类型说明
sceneNamesparams string[]场景名称筛选条件。不传入时返回所有已加载场景。
buildIndexesparams int[]Build Index 筛选条件。不传入时返回所有已加载场景。

返回值

Scene[] — 符合条件的已加载场景数组;未找到时返回空数组。

说明

获取所有(或依名称 / Build Index 筛选后的)已加载场景。


CreateScene

public static Scene CreateScene(string sceneName, CreateSceneParameters parameters)

参数

参数类型说明
sceneNamestring新场景名称。
parametersCreateSceneParameters创建场景的参数(含 LocalPhysicsMode)。

返回值

Scene — 创建的空场景。

说明

在运行时创建新的空场景(等同 SceneManager.CreateScene)。


MergeScenes

public static bool MergeScenes(Scene sourceScene, Scene targetScene)

参数

参数类型说明
sourceSceneScene来源场景(合并后将被卸载)。
targetSceneScene目标场景(接收来源场景的所有对象)。

返回值

bool — 合并成功返回 true;发生异常时输出异常日志并返回 false

说明

将来源场景的所有 GameObject 合并至目标场景(等同 SceneManager.MergeScenes)。


MoveGameObjectToScene

public static bool MoveGameObjectToScene(GameObject go, Scene targetScene)

参数

参数类型说明
goGameObject要移动的对象(必须是场景根对象)。
targetSceneScene目标场景。

返回值

bool — 移动成功返回 true;发生异常时输出异常日志并返回 false

说明

将 GameObject 移动至指定场景(等同 SceneManager.MoveGameObjectToScene)。


MoveGameObjectToActiveScene

public static bool MoveGameObjectToActiveScene(GameObject go)

参数

参数类型说明
goGameObject要移动的对象(必须是场景根对象)。

返回值

bool — 移动成功返回 true;发生异常时输出异常日志并返回 false

说明

将 GameObject 移动至当前的活动场景


SetActiveScene

public static bool SetActiveScene(int index)
public static bool SetActiveScene(string sceneName)
public static bool SetActiveScene(Scene scene)

参数

参数类型说明
indexint已加载场景列表中的索引。
sceneNamestring场景名称。
sceneScene场景实体。

返回值

bool — 设置成功返回 true(等同 SceneManager.SetActiveScene)。

说明

设置活动场景(Active Scene)。多场景 Additive 架构下,新生成的对象会归属于活动场景。

示例

// 加载子场景后,把活动场景切过去
await CoreFrames.USFrame.LoadAdditiveSceneAsync("BattleScene");
CoreFrames.USFrame.SetActiveScene("BattleScene");

SetActiveSceneRootGameObjects

public static void SetActiveSceneRootGameObjects(string sceneName, bool active, params string[] withoutRootGameObjectNames)
public static void SetActiveSceneRootGameObjects(Scene scene, bool active, string[] withoutRootGameObjectNames = null)

参数

参数类型说明
sceneNamestring场景名称。存在多个同名场景时,会对所有同名场景执行。
sceneScene场景实体。
activebool要设置的 Active 状态。
withoutRootGameObjectNamesparams string[]排除名单。名单内的根对象不变更状态。

说明

批量设置场景根对象的 Active 状态。场景无效或尚未加载完成时,输出错误/警告日志且不动作。常搭配 activeRootGameObjects: false 加载的场景使用,在适当时机再激活场景内容。


SetActiveSceneRootGameObjectsAsync

public async static UniTask SetActiveSceneRootGameObjectsAsync(string sceneName, bool active, int framesInterval = 1, int activeObjectsPerInterval = 3, params string[] withoutRootGameObjectNames)
public async static UniTask SetActiveSceneRootGameObjectsAsync(Scene scene, bool active, int framesInterval = 1, int activeObjectsPerInterval = 3, params string[] withoutRootGameObjectNames)

参数

参数类型说明
sceneNamestring场景名称。存在多个同名场景时,会对所有同名场景执行。
sceneScene场景实体。
activebool要设置的 Active 状态。
framesIntervalint每批处理之间等待的帧数。
默认值1
activeObjectsPerIntervalint每批处理的根对象数量。
默认值3
withoutRootGameObjectNamesparams string[]排除名单。

返回值

UniTask — 可等待的异步操作。

说明

分帧批量设置场景根对象的 Active 状态(每处理 activeObjectsPerInterval 个对象,等待 framesInterval 帧),避免大量对象同帧激活造成卡顿。

示例

// 每 2 帧激活 5 个根对象,平滑激活场景内容
await CoreFrames.USFrame.SetActiveSceneRootGameObjectsAsync("BattleScene", true, 2, 5);

LoadSingleSceneAsync

public static async UniTask LoadSingleSceneAsync(string sceneName, Progression progression = null)
public static async UniTask<T> LoadSingleSceneAsync<T>(string sceneName, Progression progression = null) where T : class
public static async UniTask LoadSingleSceneAsync(string packageName, string sceneName, LocalPhysicsMode localPhysicsMode = LocalPhysicsMode.None, Progression progression = null)
public static async UniTask<T> LoadSingleSceneAsync<T>(string packageName, string sceneName, LocalPhysicsMode localPhysicsMode = LocalPhysicsMode.None, Progression progression = null) where T : class

参数

参数类型说明
packageNamestring资源包名称。未指定时,使用默认 Package。
sceneNamestring场景名称(支持 build# 前缀)。
localPhysicsModeLocalPhysicsMode场景的独立物理模式。
默认值LocalPhysicsMode.None
progressionProgression加载进度回调。
默认值null

返回值

UniTask — 可等待的异步操作。泛型重载返回 UniTask<T>:Build 场景为 AsyncOperation、Bundle 场景为 BundlePack(以 as T 转型,类型不符时返回 null)。

说明

Single 模式异步加载场景(取代现有场景)。

注意 同名场景已加载时,输出警告且不重复加载。

示例

// 加载 Bundle 场景(Address 名称)
await CoreFrames.USFrame.LoadSingleSceneAsync("MainScene");

// 加载 Build Settings 场景,并监听进度
await CoreFrames.USFrame.LoadSingleSceneAsync("build#MainScene", (progress, current, total) =>
{
Debug.Log($"加载进度: {progress * 100}%");
});

LoadAdditiveSceneAsync

public static async UniTask LoadAdditiveSceneAsync(string sceneName, bool activateOnLoad = true, uint priority = 100, Progression progression = null)
public static async UniTask LoadAdditiveSceneAsync(string sceneName, LocalPhysicsMode localPhysicsMode = LocalPhysicsMode.None, bool activeRootGameObjects = true, bool activateOnLoad = true, uint priority = 100, Progression progression = null)
public static async UniTask<T> LoadAdditiveSceneAsync<T>(string sceneName, bool activateOnLoad = true, uint priority = 100, Progression progression = null) where T : class
public static async UniTask<T> LoadAdditiveSceneAsync<T>(string sceneName, LocalPhysicsMode localPhysicsMode = LocalPhysicsMode.None, bool activeRootGameObjects = true, bool activateOnLoad = true, uint priority = 100, Progression progression = null) where T : class
public static async UniTask LoadAdditiveSceneAsync(string packageName, string sceneName, bool activateOnLoad = true, uint priority = 100, Progression progression = null)
public static async UniTask LoadAdditiveSceneAsync(string packageName, string sceneName, LocalPhysicsMode localPhysicsMode = LocalPhysicsMode.None, bool activeRootGameObjects = true, bool activateOnLoad = true, uint priority = 100, Progression progression = null)
public static async UniTask<T> LoadAdditiveSceneAsync<T>(string packageName, string sceneName, bool activateOnLoad = true, uint priority = 100, Progression progression = null) where T : class
public static async UniTask<T> LoadAdditiveSceneAsync<T>(string packageName, string sceneName, LocalPhysicsMode localPhysicsMode = LocalPhysicsMode.None, bool activeRootGameObjects = true, bool activateOnLoad = true, uint priority = 100, Progression progression = null) where T : class

参数

参数类型说明
packageNamestring资源包名称。未指定时,使用默认 Package。
sceneNamestring场景名称(支持 build# 前缀)。
localPhysicsModeLocalPhysicsMode场景的独立物理模式。
默认值LocalPhysicsMode.None
activeRootGameObjectsbool加载后是否激活场景根对象。false 时加载完成后自动禁用所有根对象(之后可用 SetActiveSceneRootGameObjects 激活)。
默认值true
activateOnLoadbool加载完成后是否自动激活场景(仅对 Bundle 场景生效)。
默认值true
priorityuint场景加载优先级(仅对 Bundle 场景生效)。
默认值100
progressionProgression加载进度回调。
默认值null

返回值

UniTask — 可等待的异步操作。泛型重载返回 UniTask<T>:Build 场景为 AsyncOperation、Bundle 场景为 BundlePack(以 as T 转型,类型不符时返回 null)。

说明

Additive 模式异步叠加加载场景(不卸载现有场景)。

示例

// 叠加加载子场景
await CoreFrames.USFrame.LoadAdditiveSceneAsync("EnvironmentScene");

// 加载后先不激活根对象,稍后再分帧激活
await CoreFrames.USFrame.LoadAdditiveSceneAsync("HeavyScene", LocalPhysicsMode.None, false);
await CoreFrames.USFrame.SetActiveSceneRootGameObjectsAsync("HeavyScene", true);

LoadMainAndSubScenesAsync

public static async UniTask LoadMainAndSubScenesAsync(string singleSceneName, AdditiveSceneInfo[] additiveSceneInfos, uint priority = 100, Progression progression = null)
public static async UniTask LoadMainAndSubScenesAsync(string singleSceneName, LocalPhysicsMode localPhysicsMode, AdditiveSceneInfo[] additiveSceneInfos, uint priority = 100, Progression progression = null)
public static async UniTask LoadMainAndSubScenesAsync(string packageName, string singleSceneName, AdditiveSceneInfo[] additiveSceneInfos, uint priority = 100, Progression progression = null)
public static async UniTask LoadMainAndSubScenesAsync(string packageName, string singleSceneName, LocalPhysicsMode localPhysicsMode, AdditiveSceneInfo[] additiveSceneInfos, uint priority = 100, Progression progression = null)

参数

参数类型说明
packageNamestring资源包名称。未指定时,使用默认 Package。
singleSceneNamestring主场景名称(Single 模式加载;支持 build# 前缀)。
localPhysicsModeLocalPhysicsMode主场景的独立物理模式。
默认值LocalPhysicsMode.None(未指定的重载)
additiveSceneInfosAdditiveSceneInfo[]子场景信息数组(Additive 模式依序加载)。
priorityuint场景加载优先级(子场景依序递增;仅对 Bundle 场景生效)。
默认值100
progressionProgression加载进度回调(主场景 + 子场景合并为单一进度上报)。
默认值null

AdditiveSceneInfo 结构体字段:

字段类型说明
sceneNamestring子场景名称(支持 build# 前缀)。
activeRootGameObjectsbool加载后是否激活场景根对象。
localPhysicsModeLocalPhysicsMode子场景的独立物理模式。

返回值

UniTask — 可等待的异步操作。

说明

一次加载一个 Single 主场景多个 Additive 子场景,进度自动合并为单一 progression 上报(0 ~ 1)。

注意 主场景已加载时,输出警告并中止整个流程(子场景也不会加载)。

示例

// 一次加载主场景 + 两个子场景
await CoreFrames.USFrame.LoadMainAndSubScenesAsync(
"BattleScene",
new AdditiveSceneInfo[]
{
new AdditiveSceneInfo { sceneName = "EnvironmentScene", activeRootGameObjects = true },
new AdditiveSceneInfo { sceneName = "LightingScene", activeRootGameObjects = true }
},
progression: (progress, current, total) => Debug.Log($"总进度: {progress * 100}%")
);

LoadSubScenesAsync

public static async UniTask LoadSubScenesAsync(AdditiveSceneInfo[] additiveSceneInfos, uint priority = 100, Progression progression = null)
public static async UniTask LoadSubScenesAsync(string packageName, AdditiveSceneInfo[] additiveSceneInfos, uint priority = 100, Progression progression = null)

参数

参数类型说明
packageNamestring资源包名称。未指定时,使用默认 Package。
additiveSceneInfosAdditiveSceneInfo[]子场景信息数组(字段参考 LoadMainAndSubScenesAsync)。
priorityuint场景加载优先级(子场景依序递增;仅对 Bundle 场景生效)。
默认值100
progressionProgression加载进度回调(所有子场景合并为单一进度上报)。
默认值null

返回值

UniTask — 可等待的异步操作。

说明

批量加载多个 Additive 子场景(不加载主场景),进度自动合并上报。


LoadSceneAsync

public static async UniTask LoadSceneAsync(string sceneName, LoadSceneMode loadSceneMode, bool activateOnLoad = true, uint priority = 100, Progression progression = null)
public static async UniTask LoadSceneAsync(string sceneName, LoadSceneMode loadSceneMode, LocalPhysicsMode localPhysicsMode = LocalPhysicsMode.None, bool activateOnLoad = true, uint priority = 100, Progression progression = null)
public static async UniTask<T> LoadSceneAsync<T>(string sceneName, LoadSceneMode loadSceneMode, bool activateOnLoad = true, uint priority = 100, Progression progression = null) where T : class
public static async UniTask<T> LoadSceneAsync<T>(string sceneName, LoadSceneMode loadSceneMode, LocalPhysicsMode localPhysicsMode = LocalPhysicsMode.None, bool activateOnLoad = true, uint priority = 100, Progression progression = null) where T : class
public static async UniTask LoadSceneAsync(string packageName, string sceneName, LoadSceneMode loadSceneMode, bool activateOnLoad = true, uint priority = 100, Progression progression = null)
public static async UniTask LoadSceneAsync(string packageName, string sceneName, LoadSceneMode loadSceneMode, LocalPhysicsMode localPhysicsMode = LocalPhysicsMode.None, bool activateOnLoad = true, uint priority = 100, Progression progression = null)
public static async UniTask<T> LoadSceneAsync<T>(string packageName, string sceneName, LoadSceneMode loadSceneMode, bool activateOnLoad = true, uint priority = 100, Progression progression = null) where T : class
public static async UniTask<T> LoadSceneAsync<T>(string packageName, string sceneName, LoadSceneMode loadSceneMode, LocalPhysicsMode localPhysicsMode = LocalPhysicsMode.None, bool activateOnLoad = true, uint priority = 100, Progression progression = null) where T : class
public static async UniTask<AsyncOperation> LoadSceneAsync(int buildIndex, LoadSceneMode loadSceneMode = LoadSceneMode.Single, Progression progression = null)
public static async UniTask<AsyncOperation> LoadSceneAsync(int buildIndex, LoadSceneMode loadSceneMode = LoadSceneMode.Single, LocalPhysicsMode localPhysicsMode = LocalPhysicsMode.None, Progression progression = null)

参数

参数类型说明
packageNamestring资源包名称。未指定时,使用默认 Package。
sceneNamestring场景名称(支持 build# 前缀)。
buildIndexintBuild Settings 中的场景索引(此重载仅能从 Build 加载)。
loadSceneModeLoadSceneMode加载模式(Single / Additive)。
默认值LoadSceneMode.Single(buildIndex 重载)
localPhysicsModeLocalPhysicsMode场景的独立物理模式。
默认值LocalPhysicsMode.None
activateOnLoadbool加载完成后是否自动激活场景(仅对 Bundle 场景生效)。
默认值true
priorityuint场景加载优先级(仅对 Bundle 场景生效)。
默认值100
progressionProgression加载进度回调。
默认值null

返回值

UniTask — 可等待的异步操作。泛型重载返回 UniTask<T>:Build 场景为 AsyncOperation、Bundle 场景为 BundlePack;buildIndex 重载返回 UniTask<AsyncOperation>

说明

通用的异步场景加载方法,可自行指定 LoadSceneMode。等同 LoadSingleSceneAsync / LoadAdditiveSceneAsync 的一般化版本。

示例

using UnityEngine.SceneManagement;

// 泛型获取 Bundle 场景的 BundlePack
var pack = await CoreFrames.USFrame.LoadSceneAsync<BundlePack>("BattleScene", LoadSceneMode.Additive);

// 依 Build Index 加载
var op = await CoreFrames.USFrame.LoadSceneAsync(1, LoadSceneMode.Single);

LoadSingleScene

public static void LoadSingleScene(string sceneName, Progression progression = null)
public static void LoadSingleScene(string packageName, string sceneName, LocalPhysicsMode localPhysicsMode = LocalPhysicsMode.None, Progression progression = null)

参数

参数类型说明
packageNamestring资源包名称。未指定时,使用默认 Package。
sceneNamestring场景名称(支持 build# 前缀)。
localPhysicsModeLocalPhysicsMode场景的独立物理模式。
默认值LocalPhysicsMode.None
progressionProgression加载进度回调。
默认值null

说明

Single 模式同步加载场景。行为同 LoadSingleSceneAsync(同名场景已加载时输出警告且不重复加载)。


LoadAdditiveScene

public static void LoadAdditiveScene(string sceneName, Progression progression = null)
public static void LoadAdditiveScene(string sceneName, LocalPhysicsMode localPhysicsMode = LocalPhysicsMode.None, bool activeRootGameObjects = true, Progression progression = null)
public static void LoadAdditiveScene(string packageName, string sceneName, Progression progression = null)
public static void LoadAdditiveScene(string packageName, string sceneName, LocalPhysicsMode localPhysicsMode = LocalPhysicsMode.None, bool activeRootGameObjects = true, Progression progression = null)

参数

参数类型说明
packageNamestring资源包名称。未指定时,使用默认 Package。
sceneNamestring场景名称(支持 build# 前缀)。
localPhysicsModeLocalPhysicsMode场景的独立物理模式。
默认值LocalPhysicsMode.None
activeRootGameObjectsbool加载后是否激活场景根对象。
默认值true
progressionProgression加载进度回调。
默认值null

说明

Additive 模式同步叠加加载场景。行为同 LoadAdditiveSceneAsync


LoadMainAndSubScenes

public static void LoadMainAndSubScenes(string singleSceneName, AdditiveSceneInfo[] additiveSceneInfos, Progression progression = null)
public static void LoadMainAndSubScenes(string singleSceneName, LocalPhysicsMode localPhysicsMode, AdditiveSceneInfo[] additiveSceneInfos, Progression progression = null)
public static void LoadMainAndSubScenes(string packageName, string singleSceneName, AdditiveSceneInfo[] additiveSceneInfos, Progression progression = null)
public static void LoadMainAndSubScenes(string packageName, string singleSceneName, LocalPhysicsMode localPhysicsMode, AdditiveSceneInfo[] additiveSceneInfos, Progression progression = null)

参数

参数类型说明
packageNamestring资源包名称。未指定时,使用默认 Package。
singleSceneNamestring主场景名称(Single 模式加载;支持 build# 前缀)。
localPhysicsModeLocalPhysicsMode主场景的独立物理模式。
默认值LocalPhysicsMode.None(未指定的重载)
additiveSceneInfosAdditiveSceneInfo[]子场景信息数组(字段参考 LoadMainAndSubScenesAsync)。
progressionProgression加载进度回调(合并上报)。
默认值null

说明

同步版本的主场景 + 子场景组合加载。行为同 LoadMainAndSubScenesAsync(主场景已加载时输出警告并中止)。


LoadSubScenes

public static void LoadSubScenes(AdditiveSceneInfo[] additiveSceneInfos, Progression progression = null)
public static void LoadSubScenes(string packageName, AdditiveSceneInfo[] additiveSceneInfos, Progression progression = null)

参数

参数类型说明
packageNamestring资源包名称。未指定时,使用默认 Package。
additiveSceneInfosAdditiveSceneInfo[]子场景信息数组(字段参考 LoadMainAndSubScenesAsync)。
progressionProgression加载进度回调(合并上报)。
默认值null

说明

同步批量加载多个 Additive 子场景。行为同 LoadSubScenesAsync


LoadScene

public static void LoadScene(string sceneName, LoadSceneMode loadSceneMode, Progression progression = null)
public static void LoadScene(string packageName, string sceneName, LoadSceneMode loadSceneMode, Progression progression = null)
public static void LoadScene(string packageName, string sceneName, LoadSceneMode loadSceneMode, LocalPhysicsMode localPhysicsMode = LocalPhysicsMode.None, Progression progression = null)
public static Scene LoadScene(int buildIndex, LoadSceneMode loadSceneMode = LoadSceneMode.Single, Progression progression = null)
public static Scene LoadScene(int buildIndex, LoadSceneMode loadSceneMode = LoadSceneMode.Single, LocalPhysicsMode localPhysicsMode = LocalPhysicsMode.None, Progression progression = null)

参数

参数类型说明
packageNamestring资源包名称。未指定时,使用默认 Package。
sceneNamestring场景名称(支持 build# 前缀)。
buildIndexintBuild Settings 中的场景索引(此重载仅能从 Build 加载)。
loadSceneModeLoadSceneMode加载模式(Single / Additive)。
默认值LoadSceneMode.Single(buildIndex 重载)
localPhysicsModeLocalPhysicsMode场景的独立物理模式。
默认值LocalPhysicsMode.None
progressionProgression加载进度回调。
默认值null

返回值

名称重载无返回值;buildIndex 重载返回 Scene — 加载的场景(同名场景已以 Single 模式加载时返回 default)。

说明

通用的同步场景加载方法,可自行指定 LoadSceneMode


Unload

public static void Unload(bool recursively, params string[] sceneNames)
public static void Unload(bool recursively, params int[] buildIndexes)

参数

参数类型说明
recursivelybooltrue 时卸载所有同名场景;false 时仅卸载最后加载的一个。
sceneNamesparams string[]场景名称(支持 build# 前缀;无前缀为 Bundle 场景卸载)。
buildIndexesparams int[]Build Settings 中的场景索引(此重载仅能卸载 Build 场景)。

说明

卸载指定场景。Bundle 场景卸载会联动 AssetLoader 引用计数;Build 场景卸载通过 SceneManager.UnloadSceneAsync

注意 仅剩最后一个场景时无法卸载(输出警告)。

示例

// 卸载最后加载的一个同名子场景
CoreFrames.USFrame.Unload(false, "EnvironmentScene");

// 卸载所有同名场景(Build 场景)
CoreFrames.USFrame.Unload(true, "build#LightingScene");

CoreFrames.CPFrame

克隆 Prefab(Clone Prefab)的统一操作接口。专门管理从 Prefab 实例化(Clone)出来的小型对象,如掉落物(急救包、药草等)、子弹、UI 模板组件(物品 ICON 等)。特性是不再使用时直接 Destroy 即可——实例销毁时会自动联动 AssetLoader 卸载,确保资源引用计数正确,无需额外调用关闭接口。

方法总览

初始化

方法说明
InitInstance初始化 CPManager 单例实例。

预加载

方法说明
PreloadAsync异步预加载 Prefab 资源至缓存。
Preload同步预加载 Prefab 资源至缓存。

加载与克隆

方法说明
LoadWithCloneAsync<T>异步加载并克隆 Prefab,返回 T 实例。
LoadWithClone<T>同步加载并克隆 Prefab,返回 T 实例。

InitInstance

public static void InitInstance()

说明

主动初始化 CPManager 单例实例(纯 C# 单例,非 MonoBehaviour),建议在游戏启动阶段调用一次。


PreloadAsync

public static async UniTask PreloadAsync(string assetName, uint priority = 0, Progression progression = null)
public static async UniTask PreloadAsync(string packageName, string assetName, uint priority = 0, Progression progression = null)
public static async UniTask PreloadAsync(string[] assetNames, uint priority = 0, Progression progression = null)
public static async UniTask PreloadAsync(string packageName, string[] assetNames, uint priority = 0, Progression progression = null)
public static async UniTask PreloadAsync<T>(string assetName, uint priority = 0, Progression progression = null) where T : UnityEngine.Object
public static async UniTask PreloadAsync<T>(string packageName, string assetName, uint priority = 0, Progression progression = null) where T : UnityEngine.Object
public static async UniTask PreloadAsync<T>(string[] assetNames, uint priority = 0, Progression progression = null) where T : UnityEngine.Object
public static async UniTask PreloadAsync<T>(string packageName, string[] assetNames, uint priority = 0, Progression progression = null) where T : UnityEngine.Object

参数

参数类型说明
packageNamestring资源包名称。未指定时,使用默认 Package。
assetNamestringPrefab 资源名称(Bundle 资源使用 Address 名称;支持 res# 前缀)。
assetNamesstring[]Prefab 资源名称数组(批量预加载)。
priorityuint资源加载优先级。
默认值0
progressionProgression加载进度回调。
默认值null

返回值

UniTask — 可等待的异步操作。

说明

预先将 Prefab 资源加载至缓存(仅加载资源、不实例化)。之后调用 LoadWithCloneAsync<T> 时可直接取用,避免克隆当下产生加载延迟。泛型重载可指定加载的资源类型(非泛型重载以 Object 类型加载)。

示例

// 进入战斗前预加载子弹 Prefab
await CoreFrames.CPFrame.PreloadAsync("BulletCP");

// 批量预加载
await CoreFrames.CPFrame.PreloadAsync(new string[] { "BulletCP", "MedkitCP" });

Preload

public static void Preload(string assetName, Progression progression = null)
public static void Preload(string packageName, string assetName, Progression progression = null)
public static void Preload(string[] assetNames, Progression progression = null)
public static void Preload(string packageName, string[] assetNames, Progression progression = null)
public static void Preload<T>(string assetName, Progression progression = null) where T : UnityEngine.Object
public static void Preload<T>(string packageName, string assetName, Progression progression = null) where T : UnityEngine.Object
public static void Preload<T>(string[] assetNames, Progression progression = null) where T : UnityEngine.Object
public static void Preload<T>(string packageName, string[] assetNames, Progression progression = null) where T : UnityEngine.Object

参数

参数类型说明
packageNamestring资源包名称。未指定时,使用默认 Package。
assetNamestringPrefab 资源名称(Bundle 资源使用 Address 名称;支持 res# 前缀)。
assetNamesstring[]Prefab 资源名称数组(批量预加载)。
progressionProgression加载进度回调。
默认值null

说明

同步版本的 Prefab 资源预加载(无 priority 参数),行为同 PreloadAsync


LoadWithCloneAsync<T>

public static async UniTask<T> LoadWithCloneAsync<T>(string assetName, Transform parent = null, uint priority = 0, Progression progression = null) where T : CPBase, new()
public static async UniTask<T> LoadWithCloneAsync<T>(string packageName, string assetName, Transform parent = null, uint priority = 0, Progression progression = null) where T : CPBase, new()
public static async UniTask<T> LoadWithCloneAsync<T>(string assetName, Transform parent, bool worldPositionStays, uint priority = 0, Progression progression = null) where T : CPBase, new()
public static async UniTask<T> LoadWithCloneAsync<T>(string packageName, string assetName, Transform parent, bool worldPositionStays, uint priority = 0, Progression progression = null) where T : CPBase, new()
public static async UniTask<T> LoadWithCloneAsync<T>(string assetName, Vector3 position, Quaternion rotation, Transform parent = null, Vector3? scale = null, uint priority = 0, Progression progression = null) where T : CPBase, new()
public static async UniTask<T> LoadWithCloneAsync<T>(string packageName, string assetName, Vector3 position, Quaternion rotation, Transform parent = null, Vector3? scale = null, uint priority = 0, Progression progression = null) where T : CPBase, new()

参数

参数类型说明
packageNamestring资源包名称。未指定时,使用默认 Package。
assetNamestringPrefab 资源名称(Bundle 资源使用 Address 名称;支持 res# 前缀)。
parentTransform挂载的父节点。
默认值null
worldPositionStaysbool设置父节点时是否维持世界坐标(同 Unity Instantiate 语义)。
positionVector3实例的初始坐标。
rotationQuaternion实例的初始旋转。
scaleVector3?实例的初始缩放。
默认值null(保留 Prefab 原缩放)
priorityuint资源加载优先级。
默认值0
progressionProgression加载进度回调。
默认值null

返回值

UniTask<T> — 克隆出的实例组件;加载失败(未找到资源)或实例上未找到 T 组件时返回 null

说明

异步加载 Prefab 并实例化(Clone)。T 需为挂载于 Prefab 根对象上的 CPBase 组件(或其子类)。实例化后依序触发 OnCreateInitFirst(绑定)→ OnShow

注意
  • Prefab 主体 Active 为 true 时,克隆后自动触发 OnShow;为 false 时,实例保持禁用状态,需自行 SetActive(true) 才会触发 OnShow
  • 每次克隆都会经过加载计数,实例销毁时自动抵扣。

提醒 不再使用时,直接 Destroy(instance.gameObject) 即可,会自动联动 AssetLoader 卸载资源。

示例

// 克隆子弹并挂载至枪口节点
var bullet = await CoreFrames.CPFrame.LoadWithCloneAsync<BulletCP>("BulletCP", muzzle.transform);

// 指定位置与旋转克隆掉落物
var drop = await CoreFrames.CPFrame.LoadWithCloneAsync<DropItemCP>("MedkitCP", dropPos, Quaternion.identity);

// 使用完毕,直接销毁(自动联动卸载)
Object.Destroy(bullet.gameObject);

LoadWithClone<T>

public static T LoadWithClone<T>(string assetName, Transform parent = null, Progression progression = null) where T : CPBase, new()
public static T LoadWithClone<T>(string packageName, string assetName, Transform parent = null, Progression progression = null) where T : CPBase, new()
public static T LoadWithClone<T>(string assetName, Transform parent, bool worldPositionStays, Progression progression = null) where T : CPBase, new()
public static T LoadWithClone<T>(string packageName, string assetName, Transform parent, bool worldPositionStays, Progression progression = null) where T : CPBase, new()
public static T LoadWithClone<T>(string assetName, Vector3 position, Quaternion rotation, Transform parent = null, Vector3? scale = null, Progression progression = null) where T : CPBase, new()
public static T LoadWithClone<T>(string packageName, string assetName, Vector3 position, Quaternion rotation, Transform parent = null, Vector3? scale = null, Progression progression = null) where T : CPBase, new()

参数

参数类型说明
packageNamestring资源包名称。未指定时,使用默认 Package。
assetNamestringPrefab 资源名称(Bundle 资源使用 Address 名称;支持 res# 前缀)。
parentTransform挂载的父节点。
默认值null
worldPositionStaysbool设置父节点时是否维持世界坐标(同 Unity Instantiate 语义)。
positionVector3实例的初始坐标。
rotationQuaternion实例的初始旋转。
scaleVector3?实例的初始缩放。
默认值null(保留 Prefab 原缩放)
progressionProgression加载进度回调。
默认值null

返回值

T — 克隆出的实例组件;加载失败(未找到资源)或实例上未找到 T 组件时返回 null

说明

同步版本的加载并克隆(无 priority 参数),行为同 LoadWithCloneAsync<T>。建议搭配 Preload 先行预加载,避免同步加载造成卡顿。

示例

// 已预加载的情况下,同步克隆物品 ICON
var icon = CoreFrames.CPFrame.LoadWithClone<ItemIconCP>("ItemIconCP", iconRoot);