Fairy GUI + Addressables

        //加载FairyGUI Package
AsyncOperationHandle<TextAsset> handle = Addressables.LoadAssetAsync<TextAsset>(fairy_package);
yield return handle;

TextAsset pkgAsset = handle.Result;
UIPackage.AddPackage(
pkgAsset.bytes,
"game",
async (string name, string extension, Type type, PackageItem ite) => {

if(type == typeof(Texture))
{
Texture t = await Addressables.LoadAssetAsync<Texture>(name+extension).Task ;
ite.owner.SetItemAsset(ite, t, DestroyMethod.Destroy);
Addressables.Release(t);
}

Logger.Log($"{name}, {extension}, {type.ToString()}, {ite.ToString()}");
});

// UIPackage.CreateObject("game", "LaunchPage");
GObject go= UIPackage.CreateObjectFromURL("ui://l64dumk9pyg64t");
GObject go1= UIPackage.CreateObjectFromURL("ui://l64dumk9pyg64t");
//go.Dispose();
//go1.Dispose();
GRoot.inst.SetContentScaleFactor(1280, 720, UIContentScaler.ScreenMatchMode.MatchWidthOrHeight);
GRoot.inst.AddChild(go.asCom)

 
按上面代码使用addressable加载资源 ,运行后能显示出UI, 但是第二次运行报错,显示找到不图片资源,在Unity中查看图片资源时,无法显示,右键 reimport, Unity 直接Crash
已邀请:

谷主

赞同来自:

1. 获得Texture后马上调用Addressables.Release(t);是什么意思?
2. DestroyMethod传Custom,设置NTexture.CustomDestroyMethod为释放资源的方法。
 

zj831007

赞同来自:

多谢谷主回答,我代码修改成了这样 ,当我调用Dispose后,
CustomDestroyMethod 没有调用,只有当我关闭Unity时这个方法才被调用,这是什么原因呢?
 
        GRoot.inst.SetContentScaleFactor(1280, 720, UIContentScaler.ScreenMatchMode.MatchWidthOrHeight);
UIPackage.unloadBundleByFGUI = false;

NTexture.CustomDestroyMethod = (Texture t) =>
{
Addressables.Release(t);
Logger.Log(".... release addressable: " + t.name);
};

UIObjectFactory.SetPackageItemExtension(LaunchPage.URL, typeof(LaunchPage));


//加载FairyGUI Package
AsyncOperationHandle<TextAsset> handle = Addressables.LoadAssetAsync<TextAsset>(fairy_package);
yield return handle;
TextAsset pkgAsset = handle.Result;
UIPackage.AddPackage(
pkgAsset.bytes,
"game",
async (string name, string extension, Type type, PackageItem ite) => {
Logger.Log($"{name}, {extension}, {type.ToString()}, {ite.ToString()}");

if (type == typeof(Texture))
{
Texture t = await Addressables.LoadAssetAsync<Texture>(name+extension).Task ;
ite.owner.SetItemAsset(ite, t, DestroyMethod.Custom);

}
});
Addressables.Release(handle);


//加载更新界面
LaunchPage launchPage = LaunchPage.CreateInstance();
GRoot.inst.AddChild(launchPage);

launchPage.Dispose();//测试

谷主

赞同来自:

资源由包管理。

要回复问题请先登录注册