1)背包优化问题
2)Unity 2019在华为手机上2倍抗锯齿不失效
3)对于libunity.sym.so符号表的问题
4)Navmesh合并成一个新的NavMesh的办法
5)Prefab挂本人写的管理器脚本却无奈打包


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

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

UGUI

Q:常常会有人问背包卡顿的起因剖析,那到底是有多少种卡顿的起因以及优化的形式呢?

A1:举荐先看一下官网的UGUI课程:《Unity UI模块优化案例精讲》
对于没有优化过的背包,最大的耗费在于物品的销毁与实例化。

感激潜行医生-577493@UWA问答社区提供了答复

A2:以下是我想到的一些点,期待其余大神补充更多的内容。我的项目中理论遇到的具体问题还须要具体分析,通过性能工具进行定位耗费过高的中央,而后有针对性地进行正当优化。

1.对于未优化的背包,列表滚动过程中,Cell的加载和销毁会造成卡顿。
解决办法:应用有限滚动列表Tableview这种控件,使Cell能够进行复用,防止物体的频繁实例化和销毁。

2.背包关上一瞬间,加载了很多个格子物品进来,造成卡顿和内存冲高,GC等问题。
解决办法:分帧加载,管制一帧实例化的Cell个数,防止在同一帧内大量创立格子物品。针对资源Load过程中的卡顿,能够采纳提前预加载资源到内存的形式。

3.背包刷新时卡顿,大量的格子监听某个事件,刷新时可能造成卡顿。
解决办法:用脏标记的形式去刷新,不该刷新的局部不刷新。

4.Cell上的图片,粒子特效显示等设计不合理造成DrawCall过高。
解决办法:这个须要联合具体的我的项目和设计方案进行剖析和优化。

感激马三小伙儿@UWA问答社区提供了答复

A3:举荐一下FairyGUI这套UI零碎,FairyGUI的List只有SetVirtual就行了:https://www.fairygui.com/docs...

感激萧小俊@UWA问答社区提供了答复,欢送大家转至社区交换:

Rendering

Q:Unity 2019上,工程同时应用PostProcessing后处理性能加上抗锯齿,在华为手机上2倍抗锯齿是没成果的。

开启后处理+抗锯齿在手机上的效果图:

敞开后处理+抗锯齿在手机上的效果图:

A:测试机型光荣Play 4T在开启后处理的状况下,2x MSAA不会失效,然而4x和8x会失效。

应用Graphics Analyzer剖析真机上的gl调用发现,MSAA失效须要在场景加载前调用 glFramebufferTexture2DMultisampleEXT接口,然而在开启后处理性能并且设置为2x MSAA的状况下,引擎调用的却是glFramebufferTexture2D接口,导致抗锯齿在场景中没有失效。

然而测试小米8和Oppo A32在开启后处理的状况下设置为2x MSAA并且失效。猜想是引擎方面针对不同的GPU硬件做了一些设置,当初只能在性能容许的状况下尝试开启4x MSAA来达到抗锯齿成果。

附件(可戳原问答下载)中有两个测试APK包和一些真机测试后果。光荣Play 4T上不开启后处理的状况下,单纯的2x MSAA和4x成果简直截然不同。

感激宗卉轩@UWA问答社区提供了答复,欢送大家转至社区交换:

Android

Q:我的项目采纳的是IL2CPP模式打包,选取arm64-v8a和armeabi-v7a两个版本,没有开启Strip Engine Code选项,Unity打包版本是2018.3.6f1

当初线上的包有ANR报错如下:

  #00  pc 000000000004b7cc  /apex/com.android.runtime/lib64/bionic/libc.so (syscall+28)  #00  pc 000000000004f680  /apex/com.android.runtime/lib64/bionic/libc.so (__futex_wait_ex(void volatile*, bool, int, bool, timespec const*)+144)  #00  pc 00000000000b2120  /apex/com.android.runtime/lib64/bionic/libc.so (NonPI::MutexLockWithTimeout(pthread_mutex_internal_t*, bool, timespec const*)+688)  #00  pc 00000000009fe7b4  /data/app/~~AxXJ-H5OqAWLfQK2almqqg==/com.saiyun.avgchapters.episodestories.romance-HeZPf9aJrCJYoKrQ20DOrg==/lib/arm64/libunity.so (???)  #00  pc 00000000009fe778  /data/app/~~AxXJ-H5OqAWLfQK2almqqg==/com.saiyun.avgchapters.episodestories.romance-HeZPf9aJrCJYoKrQ20DOrg==/lib/arm64/libunity.so (???)  #00  pc 0000000000508938  /data/app/~~AxXJ-H5OqAWLfQK2almqqg==/com.saiyun.avgchapters.episodestories.romance-HeZPf9aJrCJYoKrQ20DOrg==/lib/arm64/libunity.so (???)  #00  pc 0000000000347f1c  /data/app/~~AxXJ-H5OqAWLfQK2almqqg==/com.saiyun.avgchapters.episodestories.romance-HeZPf9aJrCJYoKrQ20DOrg==/lib/arm64/libunity.so (???)  #00  pc 00000000006e3638  /data/app/~~AxXJ-H5OqAWLfQK2almqqg==/com.saiyun.avgchapters.episodestories.romance-HeZPf9aJrCJYoKrQ20DOrg==/lib/arm64/libunity.so (???)  at com.unity3d.player.UnityPlayer.nativeInjectEvent (Native method)  at com.unity3d.player.UnityPlayer.injectEvent (unavailable)  at com.unity3d.player.UnityPlayer.onTouchEvent (unavailable)  at android.view.View.dispatchTouchEvent (View.java:15199)  at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3914)  at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3578)

查看报错的机型Samsung Galaxy S10,应用的是arm64运行的游戏,我尝试应用PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Symbols\arm64-v8a下的libunity.sym.so文件查找函数名,然而提醒找不到办法。

这是什么起因?我须要用哪个符号表能力查找函数名呢?

A:倡议你试试toolchains/x86_64-4.9/prebuilt/darwin-x86_64/bin/x86_64-linux-android-addr2line这个门路。

感激Lim@UWA问答社区提供了答复,欢送大家转至社区交换:

NavMesh

Q:这边有一个需要,将一张很大的地图宰割成若干小块,目标是为了不便美术操作,而后将单个小块地图烘焙生成NavMesh。Unity提供的NavMeshLink要配点,不不便操作。请问还有其余思路去操作嘛?

A:我感觉,Unity的原生零碎给的API还是太少了,你能够试下这个插件 A* Pathfinding Project Pro,它是一个C#版本的残缺RecastNavigation实现,还蕴含传统的Grid寻路,你能够管制的更多;至于这个动静的NavMesh,你能够思考试试 TileMesh,具体能够查看RecastDemo中的TileMesh,能够一一Tile的按需创立。

感激Yaukey@UWA问答社区提供了答复,欢送大家转至社区交换:

Build

Q:各位有没有碰到过在场景中的一个Prefab挂了一个本人写的管理器脚本,而后打包打不进去的状况:script asset xx.cs can not be include in assetbundle

A:检查一下这个CS文件中是否有蕴含Editor的代码,或者Define Symbols导致Unity无奈辨认你的Core。

感激萧小俊@UWA问答社区提供了答复,欢送大家转至社区交换:

20210726
更多精彩问题等你答复~

1.Vulkan与OpenGL的抉择是否会对内存大小产生影响
2.对于Unity出AAB包的问题
3.RTS 手游技术难点

封面图来源于:Inventory System
Unity库存零碎。


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

官网:www.uwa4d.com
官网技术博客:blog.uwa4d.com
官网问答社区:answer.uwa4d.com
UWA学堂:edu.uwa4d.com
官网技术QQ群:793972859(原群已满员)