首页
学习
活动
专区
工具
TVP
发布

技术分享连载|UGUI对于emoji表情的处理|加载资源时的内存波动|Animator采样……

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

内存管理

Q:我们用的是Unity 5.5.2,下图是红米2上测试的加载8个特效资源,峰值是46MB,然后就下落到22.6MB,这个内存波动是什么引起的,是因为Rendering Batches吗?

A:按照题主提供的例子,UWA进行了测试,在Unity 5.5.2版本中的Android真机上确实复现出了这个问题。 加载4个粒子特效,红米2设备上,加载前内存:

加载时内存:

加载后内存,确实出现了Unity内存快速升高而又回落的“抖动”现象:

对此,我们又在Unity 5.6.2版本上进行了真机测试,同样是红米2:

加载前内存:

加载时内存:

加载后内存,虽然内存同样存在小幅抖动,但其抖动范围已经明显降低。

因此,建议研发团队尝试控制同一帧中Resources.Load的加载次数或者升级到更高Unity版本。

该问题来自UWA问答社区,如您对该问题仍有疑问,可以转至社区进行进一步交流。

https://answer.uwa4d.com/question/5a40eaa2b319bedd3bec6d90

UGUI

Q:我们使用UGUI的Input Field,在手机上面如果用户输入系统自带的emoji表情,会导致一些问题,导致Input Field输入框显示异常,比如会出现一个问号的字符一直没法删除之类的,请问有什么办法可以过滤掉玩家输入的emoji表情?或者把emoji表情匹配成其他的字符?我现在是用正则来匹配emoji表情的unicode编码,但这样还是会出现覆盖不全的情况。

A:UWA试下来在Unity 5.5.5p2上也重现了该问题。但在Unity 5.6.2上没有这个问题。升级确实可能会带来风险,所以建议一种方法是用正则来匹配,网上一般也都用的这个方法。

第二种是建议可以试一试的,就是对比下Unity 5.5.5p2和Unity 5.6.2的UGUI的代码改动(主要是InputField的),尝试自己对照着修修看,然后自行编译UnityEngine.UI.dll。

A:我们现在的处理方案,在inputfield上挂一个组件,采用类似代码来过滤表情符号,不过还没测试过能够完全符号所有表情符号,虽然不能过滤到所有的表情符号,但也不会报错。

感谢 rubbyzhang提供了回答。

该问题来自UWA问答社区,如您对该问题仍有疑问,可以转至社区进行进一步交流。

https://answer.uwa4d.com/question/5a4448e47a38eea813706571

动画

Q:Unity 4.x Animator 能否在编辑器下进行采样呢?比方说一个技能动作30帧,想知道每一帧下模型各个节点的坐标旋转缩放,该怎么办呢?

A:1)可以在Animation窗口中直接看。

2)利用API: AnimationUtility.GetAllCurves 或 AnimationUtility.GetEditorCurve(https://docs.unity3d.com/460/Documentation/ScriptReference/AnimationUtility.html)获取各节点的各属性AnimationCurve,然后取各AnimationCurve.keys中各keyframe的value(https://docs.unity3d.com/460/Documentation/ScriptReference/Keyframe.html)。

该问题来自UWA问答社区,感谢招文勇提供了回答,如您对该问题仍有疑问,可以转至社区进行进一步交流。

https://answer.uwa4d.com/question/5a44ff2c997cacca2128b1e1

资源管理

Q:不同项目的AssetBundle能够相互读取吗?有什么加密方式吗?不同的Unity版本对AssetBundle的兼容性如何?

A:1)AssetBundle是可以互相读取的,只要Unity版本是对应的。

2)加密是跟一般的文件加密一样,但需要通过LoadFromMemory来进行加载,具体的方法网上有很多,建议题主可以Google一下。

3)在Unity 5.x版本中,高版本的项目是支持读取低版本的AssetBundle的,只要AssetBundle上开启TypeTree(默认开启)理论上就没问题。

该问题来自UWA问答社区,如您对该问题仍有疑问,可以转至社区进行进一步交流。

https://answer.uwa4d.com/question/5a45bc64fe338d132401a799

资源管理

Q:关于加载资源的CreatefromMemory这个API,我看到UWA不推荐使用,因为其效率很低,但是我们需要做dll的更新,我们dll是用这个加载策略的,想问下有没有什么别的方法,大家都不用这个API吗?或者有没有什么特殊情况下可以用呢?如何使得这个API的耗时降到最低?求建议,感谢!

A:如果这个API仅是用来热更新代码的,那么使用它无可厚非,这个也确实是必要的,否则就是使用类似Lua的方式来进行代码热更。

UWA不推荐频繁地使用Create/LoadFromMemory这个API是指不推荐将其频繁地用在资源的加载上。如果是重要的配置文件或者dll代码,是完全可以使用这个API来进行加载的。

该问题来自UWA问答社区,如您对该问题仍有疑问,可以转至社区进行进一步交流。

https://answer.uwa4d.com/question/5a40731b6f0cccd931e1f31a

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180102G0P04I00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券