原文链接:https://blog.uwa4d.com/archives/2152.html

我们将从日常技术交流中精选若干个开发相关的问题,建议阅读时间15分钟,认真读完必有收获。如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。

UWA QQ群:465082844
UWA 问答社区:answer.uwa4d.com


UI

Q1:在UI中,有两个字体控件每帧都要显示不同的数字,第一个有8个字,第二个有6~7个字,需要开outline增加辨识度,从而引起了较高的性能开销。 把这两个控件单独放到另外独立的Canvas,该问题依然存在。现已确定该开销是由这两个字体控件每帧的文本更改引起的。 下图是UI布局:

下面是引起的开销截图:

评论提到一个是8个字,一个是6到7个字,都开启了outline。 首先建议再做一次确认,看是不是禁用这两个之后,SendWill就确实没开销了。因为这个字数看上去并不应该造成很明显的开销;

其次,如果确实是这两个造成的,那么就需要先考虑下能不能转成带outline效果的静态字体,不行的话再考虑下能不能降低更新的频率了,是不是确实要每帧都变;

如果要再降低,就只能考虑静态字体了,如果文本是一些比较固定的内容就很好处理,但如果是像聊天一样,内容无法预知的话似乎就没什么办法了。或者就是低端机用shadow来做。

该问题来自UWA问答社区,如您对该问题仍有疑问,可以转至社区进行进一步交流。
https://answer.uwa4d.com/question/5a1685a335b1f0ea7d4a7a71


物理

Q2:我的游戏场景中有一个boxcollider2D,位置在(0.0f,0.0f) 到 (1.0f,1.0f);调用Physics2D.BoxCast(new Vector2(1.0f,1.702), Vector2(1.0f, 1.4f), 0, Vector2(0.0f,1.0f), 2.0f); 会产生碰撞,理论上碰撞的边界在1.700 ,我已经将位置放到1.702,应该是规避了浮点数误差的问题的,如果我将该值放大了1.706就不会产生碰撞了,请问哪里可以调整这个误差值的范围呢?

Unity 2017.1版本的Physics2DSettings里面有一个Default Contact Offset,表示当两个collider之间的距离小于它们的ContactOffset之和就会产生碰撞。把这个值设置小一点应该能解决题主的问题,如下图所示:

Unity 5.x中Contact Offset,默认是0.01,这也是为何1.702不行,而1.706可以的原因。

该问题来自UWA问答社区,如您对该问题仍有疑问,可以转至社区进行进一步交流。
https://answer.uwa4d.com/question/5a1672b235b1f0ea7d4a7a70


渲染

Q3:UWA有篇文章推荐了使用MaterialPropertyBlock的方式来操作Material属性,能够提升效率。原文如下:使用MaterialPropertyBlock来替换Material属性操作,在查阅 ShaderLab: Properties文档(https://docs.unity3d.com/Manual/SL-Properties.html)的时候,提到:

[PerRendererData] - indicates that a texture property will be coming from per-renderer data in the form of a MaterialPropertyBlock. Material inspector changes the texture slot UI for these properties.

那么问题来了,Shader参数用不用[PerRendererData] 来描述,对MaterialPropertyBlock操作到底有没有什么影响?我测试了用和不用2种情况,显示效果上都是正常的。

理论上[PerRendererData]只是修改Editor的显示行为的。当题主通过MaterialPropertyBlock改变了某个Material的Texture之后,只有加上了这个,才能在预览对应的Material面板上看到这个新Texture。

下图1表示在没有PerRendererData时,Editor下和Runtime时的显示内容;而图2和图3分别是加了PerRendererData后,Editor下和Runtime时的显示。


图1
图2
图3

该问题来自UWA问答社区,如您对该问题仍有疑问,可以转至社区进行进一步交流。
https://answer.uwa4d.com/question/5a13f080a92f435f5e27cef3


加载

Q4:现在用Resources.Load()加载资源时,UI动画会出现卡顿的现象,如果想消除卡顿,是不是只能通过异步加载,分拆Prefab和优化材质网格动画之类的操作来实现?还是说UI动画可以在另外的线程播放之类呢?另外我想问下,异步速度是不是一定比同步慢呢?

异步加载可以缓解同步加载的卡顿,但是还是一样会卡,可以查看这个问题帖子中的说明。建议题主尝试进行资源分拆,不要同一时刻进行加载,如果不是及时显示的UI或其他GameObject,可以尝试将部分耗时资源(Atlas、Shadder等)进行预加载,如果是及时显示的UI的,那么异步加载并不能满足这个需求,也就无需考虑了;

异步速度也不一定百分百比同步慢,只能说一般情况下是如此;但具体慢多少,需要看加载的资源类型、资源量。

该问题来自UWA问答社区,如您对该问题仍有疑问,可以转至社区进行进一步交流。
https://answer.uwa4d.com/question/5a13c4baa92f435f5e27ceec


动画

Q5:游戏对战时因为会频繁更换武器或释放技能(主要是网络玩家),会替换不同的动作,但是发现每次设置animatorOverride[name]=clip(每次设置3-6个),CPU占用50-180ms,请问这是什么原因?我按照官方的指导存了一个list(https://docs.unity3d.com/ScriptReference/AnimatorOverrideController.ApplyOverrides.html),然后每次LateUpdate的时候调用ApplyOverrides,发现占用更高了,每次400ms,请问这个要怎么解决?目前每个网络玩家玩家OverRidesCount是73,会不会是Clip过多的原因?

我们在真机运行时发现animatorOverride[name]=clip的耗时会受到animatorcotrollor中的clip数目的影响,随数目的增多耗时会明显增加,70个以上的clip耗时确实能达到50ms(红米note2)以上。但换为applyOverrides方法时耗时仍然很高,而且出现了堆内存分配,但并没有达到400ms那么高。 另外,这边尝试了整体替换AnimatorOverrideController,即不在现用的AnimatorOverrideController中替换clip,而是在另一OverrideController中换好clip后,再整体替换到runtimeAnimatorController,这样耗时就会降到很低了。

该问题来自UWA问答社区,感谢Saber提供了回答,如您对该问题仍有疑问,可以转至社区进行进一步交流。
https://answer.uwa4d.com/question/5a16904135b1f0ea7d4a7a72


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

技术分享连载(八十八)相关推荐

  1. 技术分享连载(十八)

    图形渲染 Q1:我看到Unity 5.3.5版本中恢复了对粒子系统的合批功能,但是我尝试下来并没有达到这个效果.是粒子系统合批有什么要求吗,实例化会不会对粒子系统的合批造成影响呢? 经过我们验证,Un ...

  2. SDN实战团技术分享(三十八):DPDK助力NFV与云计算

    DPDK最初动机很简单,网络处理器的软件解决方案,证明IA多核处理器能够支撑高性能数据包处理. 什么是DPDK?对于用户来说,它可能是一个出色的包数据处理性能加速软件库:对于开发者来说,它可能是一个实 ...

  3. WCF技术剖析之二十八:自己动手获取元数据[附源代码下载]

    WCF技术剖析之二十八:自己动手获取元数据[附源代码下载] 原文:WCF技术剖析之二十八:自己动手获取元数据[附源代码下载] 元数据的发布方式决定了元数据的获取行为,WCF服务元数据架构体系通过Ser ...

  4. 八十八、Python | 十大排序算法系列(下篇)

    @Author:Runsen @Date:2020/7/10 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...

  5. JavaScript学习(八十八)—数组知识点总结,超详细!!!

    JavaScript学习(八十八)-爆肝 数组知识点总结,超详细!!! 每天都要进步一点点 小王加油!!! 一.数组的概念 所谓数组就是指内存中开辟出来的用来存储大量数据的连续的存储空间 数组可以把一 ...

  6. UWA 技术分享连载 转载

    技术分享连载1 Q1:Texture占用内存总是双倍,这个是我们自己的问题,还是Unity引擎的机制? Q2:我现在发现两个因素直接影响Overhead,一个是Shader的复杂度,一个是空Updat ...

  7. Android开发笔记(八十八)同步与加锁

    同步synchronized 同步方法 synchronized可用来给方法或者代码块加锁,当它修饰一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码.这就意味着,当两个并发线程同时访 ...

  8. 2022Java学习笔记八十八(网络编程:UDP通信,一发一收,多发多收消息接收实现)

    2022Java学习笔记七十八(网络编程:UDP通信,一发一收,多发多收消息接收实现) 一.快速入门 DatagramPacket:数据包对象 实例代码 定义发送端 package com.zcl.d ...

  9. 技术分享连载(八十四)

    原文链接:https://blog.uwa4d.com/archives/TechSharing_84.html 我们将从日常技术交流中精选若干个开发相关的问题,建议阅读时间15分钟,认真读完必有收获 ...

最新文章

  1. 等待 dg597 服务的连接超时
  2. 学完python基础知识之后可以做些什么-学完Python基础知识后,你真的会python吗?...
  3. Unable to find the ncurses libraries or the required header files解决
  4. 使用vim寄存器(reg)功能(vim 复制、剪切、粘贴功能简介)
  5. mysql存储引擎innodb_MySQL常用存储引擎之Innodb
  6. SSH HTTPS 公钥、秘钥、对称加密、非对称加密、 总结理解
  7. [剑指offer]面试题第[65]题[JAVA][不用加减乘除做加法][位运算]
  8. 消息中间件学习总结(16)——17 个方面,综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ 四个分布式消息队列
  9. 单页面响应式模板:黑石
  10. 月薪10000在中国是什么水平?
  11. unity2018设置雾在哪_【zSpace实操】Unity2018发布设置
  12. cad怎么倒圆角_CAD哪些技巧是菜鸟必备,哪些又让你相见恨晚?
  13. altair edem2021仿真模拟软件
  14. linux 文件夹转gb2312,Linux下将UTF8编码批量转换成GB2312编码的方法
  15. 网传前端大神司徒正美突发病逝,再度思考健康与金钱
  16. c语言 switch语句实例,C语言switch语句
  17. 来啊battle啊,Java和Python你站哪个?
  18. 服务器显示ipv4有两个ip地址,ipconfig命令后为什么出现两个IPV4地址?
  19. CPU性能参数:MIPS,频率,IPC,CPI,时钟周期,机器周期,指令周期,主频
  20. hive 大数据 除重问题研究

热门文章

  1. 国内半导体封装测试企业
  2. 计算机网络技术未来的发展模式,计算机网络技术发展模式研究
  3. Python 当中的list
  4. spss20学习之(一)
  5. 塑壳断路器选型需关注的5个重要参数
  6. 微信小程序场地预约系统+后台管理系统SSM-JAVA【数据库设计、论文、源码、开题报告】
  7. 使用Tomcat+腾讯云主机把你的项目发布到外网上
  8. ImageViewer介绍
  9. 入门也能会的进制之间的相互转化【整数与小数】
  10. 尴尬!买了几台华为路由器却不会配置~看完就会了