2

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

 6 months ago
source link: https://blog.uwa4d.com/archives/TechSharing_377.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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;
            }


        }

文件目录:

1.png

针对以上问题,有经验的朋友欢迎转至社区交流分享:
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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK