面试精粹


Unity3D 崩溃日志上报(一)

游戏在手机上崩溃了… 真是个令人无奈的事情。由于整个函数堆栈挂掉了,程序没办法借助之前做好的出错暂停来追查问题。偏巧测试人员只能在某些设备上出现问题,而现在必须定位解决问题。在事情变得更棘手之前,有什么好方案来处理这种情况么? 问题分析 回想探案影视剧中,死者如何告诉 […]


Unity3D 频道化日志(四)

融入模块 基础逻辑写好后,就可以将它作为功能添加到日志控制中了。基于之前日志接口优化中的LogManager,我需要将BitMask.cs的逻辑一并编入到DLL中。由于代码不多,我推荐直接将其复制到LogManager.cs中。另一方面,LogManager类需要扩展Mask变量 […]


Unity3D 频道化日志(三)

编辑好文件后,再创建一个测试脚本来验证。创建MaskTest.cs,将其添加到场景对象上。代码内容如下:


Unity3D 频道化日志(二)

频道算法 频道开关的判断规则,我推荐采用bitmask来实现。一方面,便于表示多个逻辑兼容的情况,另一方面,只用一个数字方便数据逻辑的迁移。创建一个名为BitMask.cs的文件,编写如下代码:


Unity3D 频道化日志(一)

频道化日志 经过开关封装后,日志模块已经告别了性能的问题。没有了这个忧虑,所有的开发人员都很开心,大家都开心的写了很多的日志。但很快,大家就发现自己的日志被淹没在海量的输出中,查找起来非常困难。请设计一套方法控制日志的输出。 问题分析 随着项目规模的扩大,日志被淹没是常见现象。因 […]


Unity3D 日志接口优化(四)

更改标准日志 现在有了新版的日志接口,但可能依然会有人使用Debug.Log作为日志输出。另一方面,如果有很多历史代码,整体替换可能不是最优的选择。这里我们需要创建一个ILoggerHandle的子类,将Debug.Log的默认输出替换成可控的函数。在LogManager.cs中 […]


Unity3D 日志接口优化(三)

DLL封装 功能虽然封装完成,但有个小缺陷:双击日志后不能跳转到Start函数中,而是跳到了LogManager的调用位置。这会增加我们的调试难度,因此必须解决这个问题。为了修复它,我们需要将LogManager类打包成DLL。 对于Windows平台,首先要找到编译器。因为是U […]


Unity3D 日志接口优化(二)

接口封装 Unity3d日志输出功能,是有依照String.Format拼接规则的接口:

但通常大家都不会去使用,而直接是使用加号进行字符串拼接。这样做会产生额外的内存分配,并且无法在封装的函数内优化掉。因此更好的 […]


Unity3D 日志接口优化(一)

问题描述 使用Unity3d的日志输出会影响游戏性能,通常会产生大量的GC并占用CPU资源。 现在希望在开发过程中依然保留日志,在打包到手机上时,将大部分日志过滤掉,达到性能优化的效果。请设计相关的解决方法。 问题分析 做过Unity3d性能优化的人都知道,在程序运行过程中,日志 […]


Unity3D 出错暂停(四)

暂停游戏 暂停游戏的核心是将游戏循环停掉。最简单的做法,是将TimeScale调整为0,这样可以停止几乎所有的动画与特效,并且可以停下FixedUpdate的调用。通常来说这种级别的暂停已经足够了。当然如果项目规划了游戏主循环,最好加入对应的暂停逻辑。这里更改函数代码如下: [c […]


Unity3D 出错暂停(三)

监听错误日志 对于输出日志的监听,可以使用为Application.logMessageReceived添加回调函数。更改代码如下:

我们添加了logMessageReceivedFunc回调函数,在其中将截获的错 […]


Unity3D 出错暂停(二)

基础环境搭建 为了测试功能,需要搭建测试环境。大致流程是这样,在场景中创建一个按钮和一个文本区域。左侧是交互按钮,右侧是显示文字的文本区域。接着创建代码

将按钮和文字的对应节点拖动到脚本节点上


Unity3D 出错暂停(一)

问题描述 我们都知道,在Unity3d的编辑器的Console中,点击ErrorPause,可以在报错时暂停游戏, 这个功能的方便之处在于:每当遇到报错时,暂停游戏可极大的方便开发人员分析产生问题的原因。 现在这个功能被项目组中的测试人员知道了,他们希望在手机上也实现类似的效果。 […]


Unity3D 绘制指示区域(三)

最后写扇形区域。扇形区域有个分隔精细度的概念,比如,分隔精度为36度,则360度的圆,就可以分成10份。显而易见这个分隔角度越小,划分的区域就越细,圆形的边缘就越平滑。但面数过多,会对性能造成负担,因此这个值需要根据效果调整,我在这里使用10度作为默认值。 [crayon-5ec […]