Assetbundle.Unload(true)卸载资源时没调用ScriptableObject的OnDisable

Assetbundle.Unload(true)卸载资源时没调用ScriptableObject的OnDisable

1)Assetbundle.Unload(true)卸载资源时没调用ScriptableObject的OnDisable
2)Unity VolumeManager中ReplaceData如何优化
3)关于使用Addressable的资源放在远程服务器后的下载问题
4)Prefab对DLL中脚本的引用丢失


这是第377篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。

UWA社区主页:community.uwa4d.com
UWA QQ群:465082844

Memory

Q:最近发现项目中的Mono内存占用一直在增长。项目用的是Addressables来管理资源。

看了下内存这块,发现项目中的Spine资源SkeletonDataAsset.cs分配了一堆内存。测试了一下,发现当我调用卸载接口时,继承ScriptableObject类的OnDisable并没有被调用到。

现在开始怀疑是不是因为ScriptableObject并没有被卸载干净导致。

有人知道这是为什么导致的吗?

针对以上问题,有经验的朋友欢迎转至社区交流分享:
https://answer.uwa4d.com/question/65e5705040a8d93b624afcf5


Script

Q:请问Unity VolumeManager中ReplaceData怎么优化?为什么每帧都会更新所有的参数?

A:因为每个相机需要判断Post是否对自己生效,每个相机执行前需要还原成默认值,否则其他相机的结果会影响到当前相机的判断结果。不只是每帧执行,是每帧每个相机都会执行一次。

感谢1 9 7 3-311135@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/65e53d4f3625c22cffcb1e3e


Resource

Q:关于Addressable构建资源在远程服务器上下载出错,打包Android后我将自己的热更资源放在远程服务器上,当我运行APK之后,在已经加载了AOT的Bundle和热更代码的Bundle的情况下,再下载一个144MB的Bundle时报错,在该文件目录下的其它Bundle正常加载。而我使用Addressable的Hosting进行局域网热更时加载完全没问题。

错误日志:
OperationException : GroupOperation failed because one of its dependencies failed RemoteProviderException : Unable to load asset bundle from : http://101.132.125.213/ServerDatalAndroid/hotscene_scenes_all_2909c01451a389c3c90a83bbd3eb13b9.bundle UnityWebRequest result : ConnectionError : Unknown Error ResponseCode : 200,Method : GET url : http://101.132.125.213/ServerData/Android/hotscene_scenes_all_2909c01451a389c3c90a83bbd3eb13b9.bundle

加载代码:

 public AssetReference hotUpdateMainSceneRef; // 热更主场景
        private async UniTask _enter_hotfix_main_scene()
        {
            try 
            {

//下载热更新场景
                var scene = await Addressables.LoadSceneAsync(hotUpdateMainSceneRef);
                // 激活场景
                await scene.ActivateAsync();
            }
            catch (Exception ex)
            {
                text.text += $"加载热更场景报错\n"+ex;
            }


        }

文件目录:

针对以上问题,有经验的朋友欢迎转至社区交流分享:
https://answer.uwa4d.com/question/65ec1e5a3625c22cffcb1e4e


Prefab

Q:开发时,不希望策划看到源码,于是将源码替换成DLL,但是这样挂在Prefab上的脚本引用会丢失,请问怎么解决?

A:通过反射查找DLL所有继承Mono的脚本,然后创建一个空的派生类继承那个Mono脚本,接着把脚本的Meta的GUID和源码里脚本保持一致,把所有生成的派生空脚本和DLL放同一个目录,只有非程序人拉取即可,我们项目就是这么弄的。

感谢水岸上@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/65e1929740a8d93b624afcf1

封面图来源于网络


今天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,我们遇到的问题只是冰山一角,UWA社区愿伴你同行,一起探索分享。欢迎更多的开发者加入UWA社区。

UWA官网:www.uwa4d.com
UWA社区:community.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:465082844