Notifications
Article
社区交流 | Unity Q&A 第3期
Published 3 months ago
162
0
Unity技术支持工程师陈嘉栋每周都会总结出,过去一周在Unity官方社区交流群中比较有代表性的问题。今天我们将分享第3期的社区Unity Q&A,内容涵盖:Tilemap、图形、UGUI、 着色器、 Timeline、光照等多个方面,其中会着重介绍一下Unity 2018的LWRP和混合光照。
Unity Q&A 系列回顾:
第1期:巧妙设置Texture Type,将ShadowMask内存占用变成之前的1/4
第2期:还原堆栈信息,分析地形系统使用ASTC纹理导致的Crash

编辑器

问题01:在Unity 2018.2中新建项目,创建一个新脚本,打开就提示如下图错误提示,如何解决?
回答:Unity 2018中创建新项目不再支持Visual Studio 2015,请使用最新版本的Visual Studio 2017。
此外,你可以使用Visual Studio Code,这是一个更快更轻,更适合Unity的脚本编辑器。

Assetsbundle

问题02:从SVN上更新下来的同一个工程,出现了不同的电脑打出来的AssetBundle大部分文件的MD5和Unity的HASH值都不一样的情况,如何解决?
回答:查看是否有漏上传Meta文件,如果有漏了上传.meta文件,然后其他人员更新下来时,由于没有原来的Meta文件,Unity自动在本地生成,使得不同人员从SVN更新下来的生成了各自的Meta文件。
Meta文件是Unity记录GUID的,不一样的Meta,在AssetBundle中计算MD5会出现问题。

Tilemap

问题03:在绘制Tilemap的时候,在场景中有一块Tile无法填充完整一个场景中的单位块,如何解决?
回答:首先检查 Sprite的Pixels Per Unit属性,如果切割的尺寸一块是64*64,该属性被设置成了100就会出现这样的问题,修改设置为64即可。
另外,还可查看Tilemap组件的Scale属性是否为1,该设置也有可能会导致Tile和场景中单位块不匹配。

图形

问题04:下图中的反射怎么改它的范围?
回答:这是由于不正确的采样造成的问题。如果你使用的是反射探针,那么针对室内或小范围内的场景反射要勾选上Box Projection。
因为对应同一个反射探针,不同位置的物体应该具有不同的反射效果。一般的Cubemap比较适合于模拟室外大场景物体的反射,室内小范围如果用Cubemap可能会出现错误。

UGUI

问题05:UGUI字体在Unity编辑器中正常显示,但是打包后在PC端运行就无法显示,如下图所示,如何解决?
回答:这是因为缺少Unity内置的UI部分的Shader,下载了后包含到Graphics里面就可以解决。

资源

问题06:打包的时候疯狂的输出“INVALID ALPHA DATA",如何解决?
回答:这比较像PVRTexTool的报错。Unity会调用PVRTexTool 的命令行工具压缩贴图,因此我们可以将报错文件的范围缩小到贴图资源。可以排查一下是否有Pvrtc格式的压缩纹理,看看Etc2_x的纹理格式,对工程中的纹理做一个排除法。
相关问题的讨论可以参考Imgtec社区的内容:
https://forums.imgtec.com/t/pvrtextoolcli-bug-encoding-etc2-rgb-a1-etc2-rgb-a1-ubn-srgb/2365

Profiler

问题07:在Windows上查看Unity的Profiler,其中“Total System Memory Usage ”一直无限增长,这正常吗?
回答:这个值是利用了Windows 上的PROCESS_MEMORY_COUNTERS_EX来获取的。你可以查看项目中Reserved Total这些有没有持续增长。如果都在增长,就必须进行优化。

App

问题08:我想做一个加载的窗口,加载完了再显示游戏内容。不过希望加载的窗口没有边框。现在调用Win32 API去设置,总是会看到先有一个有边框的窗口,然后迅速跳转到没边框的窗口,如何解决。
回答:可以调用SetWindowLong,代码如下图所示:
如果还存在跳转情况,可以考虑在程序启动参数加Popupwindow。
问题09:Android打包时出现“Unable to Convert classes into dex format”的报错,如何解决?
回答:这通常是由插件导致的。可以在项目中检查一下是否有重复的jar,如果有重复的则删除掉。 如果不想一个一个查找,也可以考虑删除项目的“Plugins”文件夹,然后重新导入所有插件。

着色器

问题10:使用Unity 2017.4,在Shader中使用“UsePass”引用同一个Shader的另外一个SubShader的Pass会导致崩溃,如何解决?
回答:UsePass主要是用来实现不同的Shader中的代码复用的,所以不要使用UsePass引用同一个Shader中的Pass。

Timeline

问题11:为什么Timeline中调用的位置运行后播放会发生偏移呢?
回答:模型上的Animator组件是否有Controller?你可以把Animator上的Controller去掉,完全由Timeline控制动作。因为在运行阶段它的动画是增量影响上层的,在编辑阶段又是覆盖上层数据,所以可能会不一样。

光照

问题12:下图是默认管线的光照探头,可以看到动态物体进入阴影范围变暗了。
下图是轻量级渲染管线LWRP的效果,烘焙后光照探头的阴影不会对动态物体产生任何影响。
烘焙模式是Mix Subtractive,光照一个Mixed模式的Directionallight,那么轻量级渲染管线LWRP的Subtractive烘焙模式,是否会使光照探头忽略阴影的影响?
回答:这不是光照探头的原因,而是目前轻量级渲染管线LWRP对混合光照的支持还不完善。对混合光照更多的支持还在开发中。使用轻量级渲染管线LWRP,如果不使用Mixed,只使用烘培光照,光照可以正确的作用于动态物体的。
下图是传统渲染流水线和LWRP在光照模式这项功能上的对比。
完整对比内容请参考文档Pipeline Feature Comparison:
https://docs.google.com/document/d/1MgoycUhS9xQKXxbTy1yHt7OCByI10rds3TyRBCSlFmg/edit

小结

以上就是过去一周Unity官方社区交流群中比较有代表性的问题,其中有你关注的问题吗?如果你也希望与Unity的技术工程师交流,欢迎加入Unity官方社区交流群:629212643 或访问Unity官方中文论坛(Unitychina.cn)!

Unity China
379
Comments