厚积薄发LuaJIT性能热点函数优化
Posted 侑虎科技
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了厚积薄发LuaJIT性能热点函数优化相关的知识,希望对你有一定的参考价值。
这是第214篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。
UWA 问答社区:answer.uwa4d.com
本期目录:
LuaJIT性能热点函数优化
Unity 2019.4打包android疑问
RenderTexture.GetTemporary报错问题
WaitForTargetFPS耗时太高
ParticleSystem.Main的有效性
A2:字符串应该是哈希值计算的消耗,这样的开销应该是很频繁地调用了。
感谢王欢@UWA问答社区提供了回答
A3:同意你的观点,但可读性变差了,得不偿失。第二点,可能比较容易出错。
感谢Robot.Huang@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/5f1ee0acaac90465cae9404c
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问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/5f1e9b0e0a39f3746f85a7ed
A:源代码:
https://github.com/Unity-Technologies/UnityCsReference
参数Width不能小于等于0。
感谢羽飞@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/5f1fd1eebc3b184c34b2e7de
Q:使用查看项目性能,发现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问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/5f2145e6fcea60306ab3d024
Q:Main为Struct值类型的只读属性,在不重新设置回对象字段的情况下修改有效。请问各位大佬,在运行时进行属性修改操作时,这种机制的底层实现原理是什么?
A1:可以参考《Particle System Modules – FAQ》:
https://blogs.unity3d.com/2016/04/20/particle-system-modules-faq/?_ga=2.201677009.1778253081.1596161185-1188773496.1492785627
感谢jim@UWA问答社区提供了回答
A2:个人理解是,这个是一个包Property的结构体。每个Property的Get和Set又指向的内部子模块的参数。
所以操作这些Property就直接操作到了内部的子模块。
感谢欧月松@UWA问答社区提供了回答
A3:MainModule这个结构体就是一个对Native接口的封装。
感谢羽飞@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/5f23cd0fc877bd43e5e37aef
封面图来源于网络
今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。
官网:www.uwa4d.com
官方技术博客:blog.uwa4d.com
官方问答社区:answer.uwa4d.com
UWA学堂:edu.uwa4d.com
近期精彩回顾
以上是关于厚积薄发LuaJIT性能热点函数优化的主要内容,如果未能解决你的问题,请参考以下文章