MIL25——模拟面试题
MIL25——模拟面试题
C#
- C# 中常用的命名规范有哪些?(至少说出3种)
- C# 编程中常见的内存管理问题有哪些?
- 在 Unity 中使用 C# 的
foreach是否会带来额外内存和性能开销? - 在游戏开发中的日志系统一般会配合 C# 中的什么一起使用?用于记录报错信息
- 对于一个 ARPG 游戏来说,如何设计技能配置表,请简要描述(比如:大概需要配置几张表,分别配置什么信息)
Unity
- Unity 中如果想要改变物理系统中默认重力的方向或大小,应该在哪里修改?
- Unity 中动态批处理和静态批处理的区别?
- Unity 发布后的应用程序的美术表现效果比在编辑器中看起来差,可能原因有哪些?
- Unity 中线性颜色空间和伽马颜色空间的主要区别是什么?
- 为什么线性的表现效果更好,Unity 默认还是使用的伽马呢?
答案
C#
-
C# 中常用的命名规范有哪些?(至少说出3种)
- 帕斯卡命名法,即每个单词的首字母大写(比如:
MyClass) - 驼峰命名法,第一个单词小写,后续单词首字符大写(比如:
myValue) - 下划线命名法,单词之间以下划线链接(比如:
my_value_name) - 匈牙利命名法,变量名中包含类型缩写前缀(比如:
strName,iCount) - 常量命名法,常用使用全大写字母,单词之间下划线分割(比如:
MAX_VALUE) - 私有成员下划线前缀法,私有成员前加下划线(比如:
_myValue)
- 帕斯卡命名法,即每个单词的首字母大写(比如:
-
C# 编程中常见的内存管理问题有哪些?
- 内存泄漏
- 内存抖动
- 线程访问冲突
- 递归造成的栈溢出
等等
-
在 Unity 中使用 C# 的
foreach是否会带来额外内存和性能开销?在老版本 Unity 中,由于 mono 编译器的一个 bug,
在使用foreach 时编译器会通过IEnumerable<T> 或IEnumerable接口访问集合的枚举器,
导致值类型被装箱,产生额外内存分配和垃圾回收。这个问题在 Unity 5.6 版本后已经就已经进行了修复。只要避免在
Update 循环中使用foreach 即可,在其他地方使用foreach没有太大的顾虑了 -
在游戏开发中的日志系统一般会配合 C# 中的什么一起使用?用于记录报错信息
需要配合 C# 中的异常捕获(
try...catch...)一起使用,在catch中通过日志系统记录报错信息 -
对于一个 ARPG 游戏来说,如何设计技能配置表,请简要描述(比如:大概需要配置几张表,分别配置什么信息)
- 技能总表:主要配置技能所用动作,技能伤害时间点,技能是否产生分离特效等等
- 技能伤害表:主要配置技能造成伤害时,给对象带来的变化(比如击退多少,击飞多少等)
- 技能分离特效表:主要配置分离特效资源 ID,对应技能伤害时间点等信息
Unity
-
Unity 中如果想要改变物理系统中默认重力的方向或大小,应该在哪里修改?
Project Setting —— Physics —— Gravity

-
Unity 中动态批处理和静态批处理的区别?
批处理技术是 Unity 提供的优化渲染性能的技术 通过减少 DrawCall 来提高渲染效率,基本原理是合并网格
-
动态批处理和静态批处理都可以在 Player Setting 中 Other Settings 中设置是否开启
静态批处理默认开启,动态批处理默认关闭
-
动态批处理是 Unity 自动会帮助我们将小型动态对象进行批处理,而静态批处理只会处理设置为静态 Static 的对象(注意:相同材质的对象)
动态批处理无法处理超过 900 个顶点属性和 225 个顶点的网格,
比如着色器使用顶点位置、顶点法线和单个 UV,则 Unity 最多可以动态批处理 225 个顶点。
但是,如果着色器使用顶点位置、顶点法线、UV0、UV1 和顶点正切,则 Unity 只能动态批处理 180 个顶点 -
动态批处理主要消耗 CPU 性能,静态批处理主要消耗内存
-
动态批处理在运行时随时可能变化(对象可以频繁进行移动、旋转、缩放等操作),静态批处理结果运行时不变(静态对象不能有变化)
-
静态批处理支持内置渲染管线、通用渲染管线、高清渲染管线、自定义可编程渲染管线,动态批处理不支持高清渲染管线
-
-
Unity 发布后的应用程序的美术表现效果比在编辑器中看起来差,可能原因有哪些?
- Quality Setting 质量设置问题,采用了低质量级别发布
- Lighting Setting 光照设置问题,有光照贴图没有正确打包和发布
- Shader Setting 着色器设置,发布时没有包含所有着色器变体,导致效果无法再对应平台上正常显示
- Texture Setting 纹理设置,采用了低质量高压缩比的纹理压缩格式
- 不兼容,一些 Shader 或者后处理效果不被对应平台支持
- 不同的图形接口程序,DX、OpenGL、Vulkan等图形接口程序不一致导致渲染效果差异
- 平台差异性,PC 和移动平台在硬件性能和渲染性能上有差异
等等
-
Unity 中线性颜色空间和伽马颜色空间的主要区别是什么?
颜色空间可以在 PlayerSettings 中的 Other Settings 中进行设置
主要区别:
- 伽马颜色空间假设颜色值以非线性方式存储和处理
- 线性颜色空间假设颜色值以线性方式存储和处理
这为最终呈现出来的颜色效果带来了差异,整体上来说:
- 线性颜色空间表现效果更好 但是伽马颜色空间的显示设备兼容性更好
- 伽马颜色空间计算复杂度较低,线性颜色空间计算复杂度较高
- 伽马颜色空间适用于传统显示设备,线性颜色空间适用于高保真需要真实光照效果的场景
-
为什么线性的表现效果更好,Unity 默认还是使用的伽马呢?
- 早期的计算机图形学和显示技术主要使用伽马颜色空间,
传统的显示设备(如CRT显示器:阴极射线管显示器)也默认使用伽马曲线来显示颜色。
为了确保向前兼容性,很多图形应用程序和引擎默认都使用的伽马颜色空间。 - 即使目前较新的显示器采用的也是 sRGB 颜色空间,是一种与伽马非常相近的非线性颜色空间
- 伽马颜色空间下的性能消耗更低,颜色和光照计算都是直接进行的,无需进行线性化和去线性化的转换步骤。
在线性颜色空间中,需要将输入的 sRGB 颜色值转换为线性颜色值进行计算,完成后再将结果转换回 sRGB 以供显示
- 早期的计算机图形学和显示技术主要使用伽马颜色空间,
