网易首页 > 网易号 > 正文 申请入驻

【厚积薄发】抓取手机端变体组合思路设想

0
分享至

这是第303篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。

UWA 问答社区:answer.uwa4d.com

UWA QQ群2:793972859(原群已满员)

本期目录:

  • 抓取手机端变体组合思路设想
  • 如何清除File.ReadAllBytes产生的内存泄露‍
  • atlas.GetSprite(name)内存泄露
  • Unity版本更新后Odin插件序列化报错

Shader

Q:关于变体收集的问题,PC端编辑器虽然自带收集,但是毕竟运行的时候是Editor环境,与真实移动端环境相差甚远。Warmup只会预加载列表中的组合,非Shader打包的全部组合。这样如果收集的变体非真实环境, 只会白白浪费CPU及GPU显存,等真实渲染的时候发现之前提交的组合非移动端所需要的,需要重新Warmup。

再者,如果做品质划分,比如精致画面开动态阴影,流畅机型关。这样会产生两套组合。理论上应该分成两个SVC,而PC是只能保存所有的变体列表。

综上,我设想解决方案就是通过真实跑手机,抓取手机的使用数据,来划分到不同的列表中,这样应该是最真实可靠的。

为了实现这个设想,需要能找到如何获得提交的变体数据,已知可以在profiler-CPU-Timeline模式下的Shader.CreateGPUProgram里面的meta_data里面可以拿到。

通过CS源码分析到NativeProfilerTimeline这个控件是绘制Timeline的核心类。NativeProfilerTimeline.GetEntryInstanceInfo这个函数可以拿到对应的meta_data。

但是这个类是C++底层写的,C#只是Draw去提交绘制。GetEntryAtPosition去根据鼠标位置来获得Entry,代码无法反射到EntryIndex。现在陷入了死胡同。

大家有解决办法或者新的思路吗?最好能获取手机上的变体列表。

A:可以在Graphics面板上勾选这个Log Shader Compilation:

编辑器下Console连接真机,这样就可以在触发Shader.CreateGPUProgram时看到相应的Log:

Autoconnected Player Compiled shader: Unlit/TestShader, pass: , stage: all, keywords FOG_EXP2

感谢宗卉轩@UWA问答社区提供了回答欢迎大家转至社区交流:

https://answer.uwa4d.com/question/62a9a151898b3a7fa617d2d9

Memory

Q:最近项目玩的时间长了,内存一直暴增。在检查过程中,发现游戏中用了一个File.ReadAllBytes方法来读取几个5~10MB不等的二进制数据,加载完数据已经复制null,但是Mono还是一直增长,调用GC都释放不掉。

理论上来讲这个数组业务层已经没有引用了。但是,用Memory Profiler查看,内存还一直在。请教一下,有没有人知道清除的方法?

Unity版本 2019.4.9

A1:缓冲区不用每次都new一个。

感谢jim@UWA问答社区提供了回答

A2:如果是Mono版本的APK,可以试试IL2CPP。如果IL2CPP版本没有这个问题,应该是遇到Mono的Bug了,一次性分配较多的堆内存,会概率出现这些分配的堆内存无法回收的问题。

感谢Xuan@UWA问答社区提供了回答

A3:Boehm GC本身的缺陷导致的,可以搜搜BlackList,若有源码,可以有很多种避免或小修的改法;若没源码可以尝试:

1. 减少字典中Struct当Key;

2. 拆小文件,重写File的接口,复用内存。

感谢kent@UWA问答社区提供了回答欢迎大家转至社区交流:

https://answer.uwa4d.com/question/6268b7d736a2fd066deabeaa

Script

Q:Unity版本 2019.4.23,发现在频繁调用atlas.GetSprite(name) 时会内存泄露,只增不减,直至崩溃!有人遇到过这问题吗?请问有什么好的解决办法吗?

A1:如果不考虑引擎本身Bug的情况下,内存泄露大部分都是引用没有处理好。可能有些地方还在使用这些资源,只是没关联上,导致无法回收这部分资源。所以可以着重先排查这部分功能。

感谢廖武兴@UWA问答社区提供了回答

A2:

// 摘要:

// Clone the first Sprite in this atlas that matches the name packed in this atlas

// and return it.

// 参数:

// name:

// The name of the Sprite.

public Sprite GetSprite(string name);

根据这段的说法是Clone,也就是说每次调用GetSprite,都会执行一次克隆操作,并且不会自动释放。

那么就要用管理脚本做一个缓冲池,重复的Sprite直接从池子里获取。并且释放的时候也从该脚本进行释放。

Dictionary mSpritePool = new Dictionary();
public Sprite GetSprite(string key, SpriteAtlas source)
Sprite result = null;
if(!mSpritePool.TryGetValue(key, out result))
result = source.GetSprite(key);
if (result != null)
mSpritePool.Add(key, result);


还可以做SpriteAtlas对象的键值对存放,方便获取和释放。


感谢canyon@UWA问答社区提供了回答欢迎大家转至社区交流:

https://answer.uwa4d.com/question/61e4f27bd8413e18eb85c85b

Script

Q:Unity版本更新后Odin序列化,版本更新后,从2020.3.21更新到2021.3.41后就出现这个问题。

A:Odin仓库有个类似的问题,在3.0.13.0版本修复了,试一下升级插件版本:

https://bitbucket.org/sirenix/odin-inspector/issues/843/error-with-serializedmonobehaviour-on

感谢羽飞@UWA问答社区提供了回答欢迎大家转至社区交流:

https://answer.uwa4d.com/question/62b91963b72f303e19830fb5

封面图来源于网络

今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。

官网:www.uwa4d.com

官方技术博客:blog.uwa4d.com

官方问答社区:answer.uwa4d.com

UWA学堂:edu.uwa4d.com

官方技术QQ群:793972859(原群已满员)

点击下方名片关注我们,将我设为星标,及时接收小编每日推送哦,性能优化不迷路~

近期精彩回顾

return result;
}

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
博主:侯森右腿后交叉韧带伤势严重,可能赛季报销

博主:侯森右腿后交叉韧带伤势严重,可能赛季报销

懂球帝
2024-06-16 18:39:21
仅剩一天!崔永熙不会退出NBA选秀 还有两队等他试训

仅剩一天!崔永熙不会退出NBA选秀 还有两队等他试训

林子说事
2024-06-16 13:19:18
联合国预测:中国人口迅速萎缩,将成为全球面对的最大挑战!

联合国预测:中国人口迅速萎缩,将成为全球面对的最大挑战!

悦悦侃历史
2023-08-15 13:09:34
台州人的骄傲!倾国倾城的美貌,却偏偏要靠才华,终获白玉兰奖

台州人的骄傲!倾国倾城的美貌,却偏偏要靠才华,终获白玉兰奖

娱乐白名单
2024-04-29 17:20:50
空姐接“私活”遇猛男,连强奸她八小时,被男子逼得报警自保

空姐接“私活”遇猛男,连强奸她八小时,被男子逼得报警自保

史二了
2023-12-31 18:52:00
遂宁中央广场楼盘40余套房屋涉嫌“一房多卖”追踪 :腾退困难,仍在协商

遂宁中央广场楼盘40余套房屋涉嫌“一房多卖”追踪 :腾退困难,仍在协商

封面新闻
2024-06-16 00:01:16
北青:塞尔吉尼奥明年一月满足归化条件,他已受足协关注

北青:塞尔吉尼奥明年一月满足归化条件,他已受足协关注

懂球帝
2024-06-16 15:28:08
发现妻子出轨第5天,我麻利做完财产分割,微笑祝福他俩白头偕老

发现妻子出轨第5天,我麻利做完财产分割,微笑祝福他俩白头偕老

星辰故事屋
2024-06-05 12:18:58
基因无法骗人!看《爸去哪儿》7位萌娃,10年后颜值差距一目了然

基因无法骗人!看《爸去哪儿》7位萌娃,10年后颜值差距一目了然

贾文彬的史书
2024-06-15 20:34:59
前队友:詹姆斯当不了主教练,因为他不理解别人隔扣不了中锋!

前队友:詹姆斯当不了主教练,因为他不理解别人隔扣不了中锋!

历史第一人梅西
2024-06-16 21:43:45
龚翔宇比赛中痛哭!王媛媛李盈莹动作暖心,蔡斌一举动再惹争议

龚翔宇比赛中痛哭!王媛媛李盈莹动作暖心,蔡斌一举动再惹争议

体坛春秋
2024-06-16 22:05:16
官宣,刘炜离任男篮,正式加盟CBA,下家敲定,合同薪水曝光

官宣,刘炜离任男篮,正式加盟CBA,下家敲定,合同薪水曝光

拳击时空
2024-06-16 07:49:21
大瓜!黄一鸣再曝猛料:不只生一个孩子,称生孩子王思聪都知道

大瓜!黄一鸣再曝猛料:不只生一个孩子,称生孩子王思聪都知道

娱记掌门
2024-06-14 18:50:25
过“紧日子”的地方政府,已经把手伸进老百姓的口袋里去了

过“紧日子”的地方政府,已经把手伸进老百姓的口袋里去了

浮事记
2024-06-03 11:48:21
富士康“赌输”了!郭台铭做梦也没有想到,“制裁”会来的这么快

富士康“赌输”了!郭台铭做梦也没有想到,“制裁”会来的这么快

说故事的阿袭
2024-06-16 16:24:57
北京一军官娶海军美女少校为妻,2年后才发现妻子的真实身份

北京一军官娶海军美女少校为妻,2年后才发现妻子的真实身份

星辰故事屋
2024-06-05 12:16:48
胡闹!南方医科大学教师因救人迟到受处分 校方回应坚持生命至上

胡闹!南方医科大学教师因救人迟到受处分 校方回应坚持生命至上

社会观察员吴洺
2024-06-16 22:09:46
一场1-1让申花重夺榜首,争冠形势却落后海港,成都失点无缘绝杀

一场1-1让申花重夺榜首,争冠形势却落后海港,成都失点无缘绝杀

体坛纪录片
2024-06-16 21:39:13
身高191体重180火遍全网的马丁-亚当:上届欧洲杯我在家喝酒

身高191体重180火遍全网的马丁-亚当:上届欧洲杯我在家喝酒

直播吧
2024-06-16 17:34:10
尘埃落定!韦世豪是否因得罪伊万无缘中韩之战,官方首次给出答案

尘埃落定!韦世豪是否因得罪伊万无缘中韩之战,官方首次给出答案

评球论事
2024-06-16 21:04:00
2024-06-17 04:44:49
侑虎科技UWA
侑虎科技UWA
游戏/VR性能优化平台
1252文章数 864关注度
往期回顾 全部

科技要闻

iPhone 16会杀死大模型APP吗?

头条要闻

冷藏货车违规乘人致8人窒息后遇难 河南叶县通报

头条要闻

冷藏货车违规乘人致8人窒息后遇难 河南叶县通报

体育要闻

没人永远年轻 但青春如此无敌还是离谱了些

娱乐要闻

上影节红毯:倪妮好松弛,娜扎吸睛

财经要闻

打断妻子多根肋骨 上市公司创始人被公诉

汽车要闻

售17.68万-21.68万元 极狐阿尔法S5正式上市

态度原创

手机
时尚
本地
教育
亲子

手机要闻

荣耀X60i入网:配置全面升级,能否满足你的所有期待?

伊姐周日热推:电影《沙漏》;动漫《眷思量2》......

本地新闻

粽情一夏|海河龙舟赛,竟然成了外国人的大party!

教育要闻

北京高考阅卷进行中,语文已有多篇作文有望拿满分!

亲子要闻

玩这个游戏的都是勇士

无障碍浏览 进入关怀版