1)Instruments如何看Mono内存调配
2)对于Addressable v1.11.2的疑难
3)开展UV2时导致Mesh顶点数减少
4)晋升Unity编辑器中代码的编译速度
5)Renderdoc调试的疑难


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

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

Memory

Q:例如在调配了一个10MB数组,对应在Unity Profiler中会看到开拓了至多10MB大小的Mono内存。

那么在Instruments中,如何查看调配的内存信息呢?Allocations中的信息是此过程中调配的所有内存信息吗,尝试调配过100MB内存,Allocations中的统计没有任何增长。

A:我这边也做了测试:

创立了100MB大小的int数组,Size理论应该是400MB。

而后到Profile察看:

能够看到ManagedHeap正确调配了这400MB的空间。

而后打包iOS后到Xcode运行,运行前首先把Run这个Scheme的Malloc Stack勾上。

RUN当前点选Memory并导出Memory Graph来察看:

因为应用程序的内存都是在VirtualMemory空间调配的,因而查看VM Regions的VM_ALLOCATE局部。

能够发现128X3+16刚好400MB的调配。

调用堆栈也很好确定:

正是咱们的测试代码。

而后咱们来看Instruments。首先是Allocations局部,有一点要留神,该栏的下部有一些选项:

留神最初一个选项,如果抉择第一个:

All Heap & Anonymous VM,All Heap对应App理论调配的物理空间,不蕴含VM,Anonymous VM的官网解释是:

interesting VM regions such as graphics- and Core Data-related. Hides mapped files, dylibs, and some large reserved VM regions。

因而一些比拟大的预留调配空间是不会显示的。

将这个选项切换为All VM Regions,就能看到调配的400M了:

并且左边详情页面也正确显示了调用堆栈:

另外,咱们还能够从VM Tracker来察看。关上VMTracker的Snapshots:

就能看到这400MB的具体调配信息:

能够发现,Virutal Size略大于400MB,因为程序其余局部也要申请一些内存。而这400MB又别离保留在Resident和Swapped内,其中Resident局部又根本等于Dirty Size,阐明这部分大小的空间被标记了Dirty是不能被替换进来的,剩下240MB左右空间是Clean空间,能够临时被替换进来以保障有足够的物理空间能应用。这也是因为咱们只是申请了这部分空间,并没有进行具体的赋值初始化和应用。

那如果赋值应用了呢?批改代码测试

运行Instruments后再察看:

能够分明的发现这400MB都在Dirty Size内。这种状况真正会给该App和iOS以内存压力。

举荐浏览:
《写给Unity开发者的iOS内存调试指南》

《Understanding iOS Memory (WiP)》

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


Addressable

Q:对于Addressable v1.11.2开始编辑器在“Fast Mode”模式下运行会获取SubAsset失败的问题。

A:明天将我的项目应用Addressables零碎从1.8.4降级到1.14.2。忽然发现AssetReference指向的资源进行实例化总是报Key有效的谬误。考察后发现从1.11.2开始,为了给FastMode进一步减速,官网批改了流程。

之前版本即便是Fast Mode下,也是要进行一次Build,并且Play时读取Build进去的Catalog,Catalog会序列化所有的AssetEntry和SubAsset,生成ResourceLocationMap对象而后进行检索。咱们应用了不少AssetReference来指向SubAsset应用。这时应用没有问题。

1.11.2版本开始,Fast Mode间接提供编辑器环境下AddressableAssetSettings对象的GUID而非Catalog文件门路,因而Play后初始化时则会启用FastMode专用的初始化操作FastModeInitializationOperation,这时生成的不是ResourceLocationMap,而是AddressableAssetSettingsLocator,这个Locator只是遍历了编辑器Group窗口对应可见的Group内的AssetEntry,而AssetEntry外部的SubAsset则不会被遍历到,因而如果游戏中用到SubAsset,就会报Key有效的谬误。

官网Changelog:

Refactored Play Mode Script for "Use Asset Database" to pull data directly from the settings. This reduces the time needed to enter play mode.

倡议:

  • 临时只应用v1.8.4版本(经我的项目长期应用,绝对较为稳固)
  • 不倡议应用1.9.2到1.11.2期间版本,还有其余bug
  • 降级到最新的状况下,应用Simulate Groups模式进行开发
  • 期待官网后续改良

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


Rendering

Q:在Unity中主动开展UV2(Generate Lightmap UVs),会造成个别物体的Mesh中顶点个数减少。

我主动开展的一个高空,顶点数从134变成136,如果不开展UV2,是没有问题的。请问,有什么方法能够在开展UV2时,不减少顶点个数吗?

在导入FBX模型时,没有勾选优化Mesh和其余影响顶点的一些选项。

A:因为有时候2个面片对应到Lightmap上2个不间断区域,而这两个面片上的顶点可能共享,因而须要拆开成2个顶点,其余数据统一,然而UV2不同。属于失常景象。

想要不减少,除非美术手动设置UV2并导出,即便如此,如果模型在一些面是突围闭合的,也很难保障顶点不反复。其实这个时候是顶点在Maya等工具内曾经做了减少后导出。Unity内可能看不出变动。

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


Build

Q:有没有什么方法能够晋升Unity编辑器中代码的编译速度?咱们当初每批改一次代码,期待的编译工夫都将近半分钟。

A1:对于大型项目来说,这的确是大家常常遇到的状况。一般来说,Unity Editor会依照脚本的依赖关系编译代码,其次要分为以下四个步骤:

  • 编译Standard Assets、Pro Standard Assets和Plugins文件夹中的Runtime Script;
  • 编译以上三个文件夹中Editor文件夹下的Script;
  • 编译我的项目中所有残余的Runtime Script(Editor文件夹以外Script);
  • 编译残余Script(即Editor文件夹中Script)。

晓得了Unity编辑器的脚本编译个性后,咱们则倡议研发团队能够将一些长时间不须要改变的脚本代码(比方各种插件代码)放入到Standard Assets、Pro Standard Assets或Plugins文件夹中,这样这些代码只须要编译一次,后续的工夫就都能节省下来。

有敌人做过测试,在他们的我的项目中通过下面的改变,原来我的项目每次的编译工夫从23s降落到7s。想想看,这将节俭你和你的团队多少工夫!

举荐插件:Mad Compile Time Optimizer
举荐浏览:《优化Unity我的项目编译速度》

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

A2:添加程序集定义:

https://docs.unity.cn/cn/2020.2/Manual/ScriptCompilationAssemblyDefinitionFiles.html

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

A3:拆分工程编译成不同的DLL,Unity 2017后能够应用引擎自带的工具定义成不同的工程。

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


Rendering

Q:Pixel Context是灰的:

Debug Vertex也是灰色的:

这是为什么呢?

A1:像素调试的Shader里加#pragma enable_d3d11_debug_symbols。

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

A2:官网文档说有阐明,只能在D3D11或者D3D12中进行调试:

https://renderdoc.org/docs/how/how_debug_shader.html#hlsl-debugging

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

封面图来源于网络


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

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

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