1)LuaJIT性能热点函数优化
2)Unity 2019.4打包Android疑难
3)RenderTexture.GetTemporary报错问题
4)WaitForTargetFPS耗时太高
5)ParticleSystem.Main的有效性


这是第214篇UWA技术常识分享的推送。明天咱们持续为大家精选了若干和开发、优化相干的问题,倡议浏览工夫10分钟,认真读完必有播种。

UWA 问答社区:answer.uwa4d.com
UWA QQ群2:793972859(原群已满员)

Script

Q:征询我的项目中的这个函数耗时十分重大,有什么优化的办法吗?

A1:这个是table.get,对应获取字段或者拜访数组时调用的函数:

  1. 优先应用间断数组而不是英文名字段,能够显著晋升拜访效率并升高内存耗费,很多团队喜爱应用Class的写法,能够这样革新:
    local obj = ClassA.New()
    obj.abc = 1
    obj.cde = "test"
    变成:
    local obj = ClassA.New()
    obj[1] = 1
    obj[2] = "test"
    这个办法能够针对应用频率较高的代码进行革新。
  2. 本人开发工具,在编译Lua之前,将Lua代码中的常量从英文名变量转换为数值,这个能够联合1应用,就能够在开发期写英文名字段名,而后编译时转换为数组。

感激招文勇@UWA问答社区提供了答复

A2:字符串应该是哈希值计算的耗费,这样的开销应该是很频繁地调用了。

感激王欢@UWA问答社区提供了答复

A3:批准你的观点,但可读性变差了,得失相当。第二点,可能比拟容易出错。

感激Robot.Huang@UWA问答社区提供了答复

Build

Q:Unity版本由2018.4.0f1降级到2019.4.5f1,其中Android的Custom Manifest、Custom Gradle Template都拆分为了两个,别离为Main和Launcher。之前对接的各个Android SDK感觉须要从新做了。请问有比拟相熟的,能够指导一下这里吗?

咱们之前各个SDK都是以JAR和AAR的模式间接放在Unity工程内,间接Unity出包,当初间接Build会有各种报错,感觉是不兼容之前的格局了。

A1:咱们也遇到了内部编译的AAR内的Manifest和Unity内的Manifest抵触问题。因为2019其实是能够间接编译Java的,咱们罗唆勾销了内部工程,间接把Java代码和OC的代码放入Unity工程,而后只应用Unity内的Manifest,就没有抵触谬误了。

咱们我的项目是2017的,过后记得MM能够,然而Java不行。起初用2018开的其余我的项目因为临时没遇到相似需要,就没试,最近另外一个我的项目间接2019来做就这样对应了。

感激黄程@UWA问答社区提供了答复

A2:找了找文档 https://forum.unity.com/threads/using-unity-as-a-library-in-native-ios-android-apps.685195,咱们是手动把原来一个Manifest文件的内容给拆了一下,LauncherManifest只放图标和App Name相干的设置。

之后有工夫也筹备试试黄程大佬的办法。

感激题主张斌@UWA问答社区提供了答复

Script

Q:应用GetTemporary这个办法进行图片资源的创立时,产生了这个谬误:ArgumentException: RenderTextureDesc width must be greater than zero.

望各位赐教。请问这部分源代码在哪里能够看到?

A:源代码:
https://github.com/Unity-Technologies/UnityCsReference

参数Width不能小于等于0。

感激羽飞@UWA问答社区提供了答复

Script

Q:应用GPM查看我的项目性能,发现WaitForTargetFPS耗时太高,均值在20ms左右。网上查找说是因为开了垂直同步的问题,依照网上的解决形式从新打包过后,并没什么成果。

A1:在真机上,如果Application.targetFrameRate = -1 还是会主动与屏幕的刷新率同步,想把这个“耗费”降下来,就设置成144。

其实这个只是CPU在期待屏幕刷新,有这个“耗费”其实是坏事,阐明CPU和GPU的负载不高,发热不厉害。

感激张首峰@UWA问答社区提供了答复

A2:你能够看看Unity官网文档上对于WaitForTargetFPS的解释。

https://docs.unity.cn/cn/2019.4/Manual/ProfilerCPU.html#samples-rendering

感激tyer@UWA问答社区提供了答复

Script

Q:Main为Struct值类型的只读属性,在不从新设置回对象字段的状况下批改无效。请问各位大佬,在运行时进行属性批改操作时,这种机制的底层实现原理是什么?

A1:能够参考《Particle System Modules – FAQ》

感激jim@UWA问答社区提供了答复

A2:集体了解是,这个是一个包Property的构造体。每个Property的Get和Set又指向的外部子模块的参数。

所以操作这些Property就间接操作到了外部的子模块。

感激欧月松@UWA问答社区提供了答复

A3:MainModule这个构造体就是一个对Native接口的封装。

感激羽飞@UWA问答社区提供了答复

封面图来源于网络


明天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题兴许都只是冰山一角,咱们早已在UWA问答网站上筹备了更多的技术话题等你一起来摸索和分享。欢送酷爱提高的你退出,兴许你的办法恰能解他人的当务之急;而他山之“石”,也能攻你之“玉”。

官网:www.uwa4d.com
官网技术博客:blog.uwa4d.com
官网问答社区:answer.uwa4d.com
UWA学堂:edu.uwa4d.com

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