关于ui:背包优化问题

61次阅读

共计 4177 个字符,预计需要花费 11 分钟才能阅读完成。

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(原群已满员)

正文完
 0