tuyoogame / YooAsset

unity3d resources management system
https://www.yooasset.com/
Apache License 2.0
2.46k stars 482 forks source link

有个使用问题想请教一下,在联机运行模式下,YooAsset已经初始化了,一段时间后,服务器有一个新的DefaultHostServer返回,如何将新的DefaultHostServer更新到YooAsset? #69

Open HXiaoMing opened 1 year ago

HXiaoMing commented 1 year ago

在联机运行模式下,YooAsset已经初始化了,一段时间后,服务器有一个新的DefaultHostServer,如何将新的DefaultHostServer更新到YooAsset?

原本想着调用YooAsset.AssetsPackage.InitializeAsync 更新DefaultHostServer,但是会报错(AssetsPackage is initialized yet)

System.Exception: AssetsPackage is initialized yet. at YooAsset.AssetsPackage.CheckInitializeParameters (YooAsset.InitializeParameters parameters) [0x00000] in <00000000000000000000000000000000>:0 at YooAsset.AssetsPackage.InitializeAsync (YooAsset.InitializeParameters parameters) [0x00000] in <00000000000000000000000000000000>:0

请问这种情况要怎么处理?

basstal commented 1 year ago
        public static IEnumerator SwitchMode(bool offline)
        {
#if !UNITY_EDITOR
            YooAssets.Destroy();
            YooAssets.Initialize();
            package = YooAssets.CreateAssetsPackage(yooAssetSettings.DefaultPackage);
            // 设置该资源包为默认的资源包,可以使用YooAssets相关加载接口加载该资源包内容。
            YooAssets.SetDefaultAssetsPackage(package);
            if (offline)
            {
                yield return Instance.InitializeYooAssetOfflinePlayMode();
            }
            else
            {
                yield return Instance.InitializeYooAssetHostPlayMode();
            }
#else
            throw new NotImplementedException();
#endif
        }

可以销毁了重新初始化,还可以换 mode, 不过你可能需要回退到一个 patch 界面中干这件事。

HXiaoMing commented 1 year ago
        public static IEnumerator SwitchMode(bool offline)
        {
#if !UNITY_EDITOR
            YooAssets.Destroy();
            YooAssets.Initialize();
            package = YooAssets.CreateAssetsPackage(yooAssetSettings.DefaultPackage);
            // 设置该资源包为默认的资源包,可以使用YooAssets相关加载接口加载该资源包内容。
            YooAssets.SetDefaultAssetsPackage(package);
            if (offline)
            {
                yield return Instance.InitializeYooAssetOfflinePlayMode();
            }
            else
            {
                yield return Instance.InitializeYooAssetHostPlayMode();
            }
#else
            throw new NotImplementedException();
#endif
        }

可以销毁了重新初始化,还可以换 mode, 不过你可能需要回退到一个 patch 界面中干这件事。

感谢回复,如果有接口可以修改HostPlayModeParameters就更好了。还有一个问题,如果想在下载cdn资源的时候,在请求的头部加一些参数(FileDownloader 里面的UnityWebRequest 加一些请求参数),请问可以怎么实现?

gmhevinci commented 1 year ago

提交的PR已经合并~~

gmhevinci commented 1 year ago

动态替换HostURL地址,我感觉不是一个好主意。如果非要这样做的话,可以把package销毁了,然后重新创建一个package并初始化。