Unity 模拟面试题
C#
- 装箱和拆箱是什么?
装箱 - 把栈中内容迁移到堆中去(值类型 转 引用类型)
拆箱 - 把堆中内容迁移到栈中去(引用类型 转 值类型)
1 | int i = 3; |
- 值和引用类型在变量赋值时的区别是什么?
值类型赋值时复制值本身,而引用类型赋值时复制引用(指针)。
在变量赋值时,值类型和引用类型的区别主要在于它们的存储方式和行为:
值类型(Value Types):
- 存储在栈(Stack)上。
- 赋值时会创建该值的副本。
- 更改副本不会影响原始变量。
- 例如:基本数据类型(int, float, bool)和结构体(struct)。
引用类型(Reference Types):
- 存储在堆(Heap)上,栈上存储指向堆内存的引用。
- 赋值时会复制引用(地址),而不是对象本身。
- 更改引用的对象会影响所有指向该对象的引用。
- 例如:类(class)、数组、字符串(string)。
- 委托和事件在使用上的区别是什么?
调用权限:
- 委托:可以被外部代码直接调用。
- 事件:只能在声明它的类中调用(触发)。
订阅和取消订阅:
- 委托:可以被外部代码赋值、替换、调用。
- 事件:只能被外部代码订阅(+=)和取消订阅(-=),不能直接赋值和调用。
语义和用途:
- 委托:用于通用的回调机制,允许方法作为参数或返回值。
- 事件:用于发布-订阅模式,提供一种通知机制。
有两个接口 IA 和 IB,他们中有一个同名方法 Test() 一个类同时继承这两个接口,应该如何处理他们的同名方法?
请说明 C#中的 List 是如何扩容的
请说说你认为 C#中 == 和 Equals 的区别是什么?
浅拷贝和深拷贝的区别?可以举例说明
下面两种获 10000 个数的方式,哪种效率更高?为什么?
请说出下方代码中
1.A处和B处谁先打印? 2.A、B出打印的i值分别是多少?
请问 A、B 两处 i 的值为多少?
泛型的约束有哪几种?
什么是闭包?可以举例说明
内存泄漏指什么?常见的内存泄漏有哪些?
序列化是什么?常见的序列化方式有哪些?什么时候我们会用到序列化?
请问 A、B、C 三处打印结果分别为多少?为什么?
请说明字符串中
string str = null
string str = “”
string str = string.Empty
三者的区别C#重载运算符,重载 == 和 != 以及
万物之父 Object 基类中的虚方法 virtual bool Equals(Object obj)
对于我们的意义是什么?在开发时,对 string 和 StringBuilder 我们应该如何选择
请简要说明.Net 跨语言原理
请简要说明.Net 跨平台原理
以下代码,谁的效率更高?为什么?
数组和链表的区别是什么?
C# 中的 Action 和 Func 是什么? Unity 中的 UnityAction 是什么? 他们有什么区别?
请问最终的打印结果是什么?
网络游戏开发中,网络传输数据的基本流程是什么?
C#中如何让自定义容器类能够使用 for 循环遍历?(通过 类对象[索引] 的形式遍历)
C#中如何让自定义容器类能够使用 foreach 循环遍历?
C#中接口的作用是什么?说说你的理解
Unity 引擎中哪些功能使用了 C#的反射功能?至少说出一点
请问这三行代码,运行后,在堆上会分配几个“房间”
C#中如何让一个类不能再被其他类所继承?
C#中使用泛型的好处是什么?
C#中元组对于我们的作用是什么?
请说明 Thread、ThreadPool、Task 分别是什么?并简单说明彼此的区别
请简述 GC(垃圾回收)产生的原因,并至少说出避免 GC 发生的三种方式?
如果我们想为 Unity 中的 Transform 类添加一个自定义的方法,应该如何处理?
请说出 using 关键字的两个作用
C#中 Dictionary 不支持相同键存储
如果想要一个键对应多个值如何处理?请问下面代码的最终打印结果是什么?为什么?
上题中的代码,如果我们希望打印出 0~9,应该如何修改代码?
内存中,堆和栈的区别是什么?
TCP 协议和 UDP 协议的区别
TCP 协议的可靠性是如何达到的?
内存抖动指什么?如何避免内存抖动
buff 系统中,如何用一个 byte,记录多种 buff 状态标识
文件中保存了文本信息,但是打开后却是乱码,一般是什么原因造成的?
C#中 new 关键字的作用(至少说出 3 种)
同步方法和异步方法的区别是什么?
异步编程是什么意思?
对于我们来说,什么时候需要使用异步编程?(至少说出 3 种)回调函数指什么?一般在什么时候使用?(至少说出 3 种使用场景)
如何用一个 int 变量,记录 32 种状态?(注意:状态可以并存)
List 是链表还是数组
上一题追问:
当 list 满了的时候,我再加入一个元素它的效率会比较低啊,它内部大概是一个什么样的执行过程呢?csharp 里面有一个常用的接口叫做 IDispose,它的作用是?
上一题追问:
csharp 有垃圾回收机制,把一个对象设置为空的时候,系统会帮我们回收,它和接口 IDispose 有什么关系吗?为什么会存在两个做析构事情的东西呢?Unity 中的生命周期函数,为什么设计为反射调用,而不是通过继承重写生命周期函数的形式去实现呢?(非字节题目,同学疑问,至少答出一种原因)
C#中哪些变量类型是值类型(至少说出 13 种),哪些是引用该类型(至少说出 5 种)
1.在自定义类中声明的成员变量,类型为 int,该 int 变量存储在栈上还是堆上? 2.在自定义结构体中声明的成员变量,类型为 string,该 string 变量存储在栈上还是堆上?
C#中在什么情况下会选择使用接口,什么情况下会选择使用抽象类?
C#中什么是托管内存和非托管内存?
请问什么是线程安全?如何在 C#中实现线程安全操作?
C#中属性(Property)和字段(Field)的区别是什么?
请解释一下 C#中的异步编程模型(Async/Await),它是用来做什么的?
请问七大排序算法一般指哪七种排序算法?
你一般常用的排序算法是哪种?请简单描述它的排序原理请简单描述斐波那契数列的基本规则是什么
请简单描述 A 星寻路算法的基本原理
抽象类中的虚函数和抽象函数,是否必须在子类中重写?
当我们使用里式替换原则,用父类容器装载子类对象时
我们通过该父类容器调用其中的一个虚函数,执行的逻辑是父类中的还是子类中的逻辑呢?我们在游戏开发时,想要获取系统时间,应该如何获取?
C#使用 var 声明临时变量相比用指定变量类型声明临时变量,在最终执行时是否会增加性能消耗?
int a = 10;
int b = a;
b = 20;
我们知道,上述代码 b 改为 20 后,a 还是 10。(值类型的特点)
我们是否可以简单修改以上代码,让 b 变成 20 后,a 跟着一起变。
请说出修改方案我们可以使用 C#中的迭代器来做什么?至少说出两点
面向对象的七大原则分别是什么?并选择其中一个原则说明它的意思
为什么单例模式在游戏开发中很常用?至少说出 3 个优点
工厂模式在游戏开发中一般用来做什么?
观察者设计模式在游戏开发中有什么作用?
递归函数是什么?请用一句话总结
在编写递归函数时,最需要关注的两点是什么?请说出你自己的理解
C#中如何在函数中返回多个返回值?(至少说出 3 种方法)
二分查找(折半查找)的原理是什么?
在游戏开发中,我们可以利用数据结构中的树参与哪些功能的制作?(至少说出 3 点)
父类中定义了一个静态成员属性,有两个子类都继承该父类,请问打印结果是什么?为什么
泛型父类中定义了一个静态成员属性,有两个子类都继承该泛型父类,请问打印结果是什么?为什么
使用 C#制作游戏存档功能,请问有几种做法?(至少说出三种)
C#中是否可以通过反射获取到类内部的私有成员?
在制作游戏存档功能时
C#中反射主要可以发挥出哪些作用(至少说出三点)float f = 10.4;
int i = f / 2;
Console.WriteLine(i);请问上面这段代码的打印结果是多少?
在 C#当中,我们想要用一个字典容器存储场景中的所有敌对对象
比如 怪物、Boss、可被攻击的场景物件等等
应该如何存储在 C#中,给你一个数字,表示有 n 秒
请问如何在不改变这个数字的前提下
将它转换成格式为 小时分__秒请问执行以上代码后,List 中还存在哪些内容?
假设游戏中有一个怪物管理器管理所有怪物,那么在开发时,为了避免内存泄漏,我们需要注意什么?
C#类中的函数是否占用内存空间?
C#中的函数是何时被加载到内存中的呢?
C#函数中一般会声明一些临时变量,当函数被加载内存中后
所占的内存空间是否包含函数中的这些临时变量?
C#中委托的本质是什么?
它是如何存储函数的?C#中事件的本质是什么?
为什么要为缓存池中的单个池子设置对象上限?
任务系统中,某任务是要采集某一种植物 n 株后才能完成。
说一说制作思路有两个泛型类,他们是父子关系
public Father<Father> Test()
{
return new Son<Son>();
}
这个写法是否正确?数据结构中的树,一般会在游戏开发中用来处理什么?至少说出 3 点
游戏开发中逻辑与表现如何分离?非 UI 系统
C#中在字符串前面加一个@符号或者$符号有什么作用
C#中提供了序列化和反序列化 2 进制数据的公共类 BinaryFormatter
为什么我们一般还要自己去实现序列化和反序列化 2 进制数据的方法?异或加密的原理是什么?请简要说明
这个函数是判断一个整数是不是 2 的 n 次方。请问 if 语句中应该如何书写
有 1000 瓶水其中一瓶是有毒的,喝下后 24 小时后才死,现在用小白鼠来测试哪一瓶有毒。最少需要用多 少只小白鼠才能测出哪一瓶是有毒的水(需要在 24 小时后出结果,不能用几天时间来测试)
int[,] strArray = new int[3, 4]这个语句创建了多少个 int 对象?
string[,] strArray = new string[3, 4]这个语句创建了多少个 string 对象?为什么我们要尽量避免装箱拆箱?避免装箱拆箱的方案有哪些?
为什么说闭包可能会带来内存泄漏?
单机游戏中,我们如何避免玩家利用修改器修改客户端数据?(至少说出 2 点方案)
网络游戏中,我们如何避免外挂的产生?(至少说出 2 点方案)
value1 和 value2 谁先初始化
1 | public class Main1 |
C#中数值在调用 ToString()方法时,若传入字符串参数,有哪些格式转换规则?(至少说出 3 点)
C#中 ulong 类型可以表示最大的整数为多少?
C#中的 BigInteger 类对于我们来说有什么意义?C#中如何把 int 数组转换为 string 数组?(请至少说出 2 种方式)
为什么我们使用单例模式更多,而几乎不使用静态类?
C#中常用的命名规范有哪些?(至少说出 3 种)
C#编程中常见的内存管理问题有哪些?
在 Unity 中使用 C#的 foreach 是否会带来额外内存和性能开销?
在游戏开发中的日志系统一般会配合 C#中的什么一起使用?用于记录报错信息
对于一个 ARPG 游戏来说,如何设计技能配置表,请简要描述
(比如:大概需要配置几张表,分别配置什么信息)
Unity
Unity 中点乘和叉乘对于我们来说的作用是什么?
Unity 中多线程执行下面哪些代码会报错?
A. Application.persistentDataPath
B. File.Exists(“文件名”)
C. transform.Translate
D. Object.Destroy(对象)
Application.streamingAssetsPath 和 Application.persistentDataPath
两个路径有何区别?对于我们的意义是什么?
请简述 Unity 中协程的原理
Unity 底层如何处理 C#代码?
Unity 中当一个细小高速物体撞击另一个较大物体时,会出现什么情况?如何避免?
请简述一下 Prefab(预制体)的本质是什么?
Unity 是否支持写成多线程程序?如果支持的话需要注意什么?
请简述一下对象池,在游戏开发中我们什么时候会用到它?
什么是 DrawCall?DrawCall 为什么会影响游戏运行效率?如何减少 DrawCall?
transform.forward 和 Vector3.forword 的区别
Unity 中如何解决过多创建和删除对象带来的卡顿问题?
游戏中的成就系统,我们一般会使用设计模式中的哪种模式来制作?为什么?
请简述热更新的流程
我们应该如何优化 UI(基于 UGUI)
Unity 中的 Destroy 和 DestroyImmediate 的区别是什么?
请问最终打印的 s 的结果为?
第一次执行 GameObject.Instantiate 时可能出现明显的卡顿
如何解决该问题?Lua 如何实现面向对象的三大特性?
Unity 使用 IL2CPP 打包时,我们应该注意什么?如何避免(可以举例说明)
两个四元数相乘有什么作用?
四元数乘以向量有什么作用?图中的小球是否被渲染了?是否会产生 DrawCall?
在没有使用遮挡剔除的情况下,图中 A 和 B 都是默认标准材质
图中的小球最终是否会被渲染,是否会产生 DrawCall如果不考虑 IOS 平台,只在 Windows 和 Android 平台上发布游戏,如何在不使用第三方热更新方案的前提下实现热更新功能
Unity 中如何调试排查 Android 上运行的项目问题
Unity 中 Awake 和 Start 两个生命周期函数,分别在什么时候被调用?
Unity 场景上有多个对象,都分别挂载了 n 个脚本。
我们如何控制不同脚本间生命周期函数 Awake 的执行先后顺序?想要在 Unity 中使用指针我们需要进行哪些操作?
Unity 中的协同程序中 yield return 不同的内容,代表的含义不同
请说明下面这些 yield return 的含义
1.yield return 数字;
2.yield return null;
3.yield return new WaitForSeconds(数字);
4.yield return new WaitForFixedUpdate();
5.yield return new WaitForEndOfFrame();
6.yield break;使用 Unity 协同程序进行异步加载时,底层是否会使用多线程?
Unity 中动态加载资源的方式有哪些?
Unity 中的光照贴图的作用是什么?
Unity 场景中有两个点连成了一条线,想要旋转这条线,应该怎么做?
LOD(多细节层次)和 MipMap(纹理图)的作用是什么?
游戏开发中,客户端和服务端交互数据,程序中常用方式是什么?
Unity 中如何将本地坐标转为世界坐标?
Unity 中如何计算出两个向量之间的夹角,请说出两种方式
请写出 UGUI 中两种处理异形按钮的具体方法
请说出 Unity 中如何进行数据持久化,至少说出 5 种方式
在 Unity 中如何控制渲染优先级?(谁先渲染谁后渲染,分情况回答)
Unity 中判断两个 2D 矩形是否相交,有几种方式?(请至少说出两种方式)
Unity 中想要制作角色的连招功能,在制作状态机时我们一般如何处理?
Unity 中如果想要在动作的某一时刻进行伤害检测,我们应该怎么做?(请说出两种做法)
Unity 中想要制作自动寻路逻辑,我们应该怎么做?(请至少说出两种做法)
游戏编辑器(比如 角色编辑器、关卡编辑器、地图编辑器等工具)的本质是什么?
Unity 中使用的是左手还是右手坐标系?我们需要注意什么?
Unity 中鼠标、键盘、触屏、手柄等输入事件会在 Update 之前、还是之后、还是同时执行?
Unity 中场景中一个处于激活状态的物体(场景上只有这一个物体),不能被摄像机渲染出来,可能有几种情况?(至少说出 3 种可能的情况)
Unity 制作物理游戏相关功能时,我们采用哪种方式处理位移?为什么?
Unity 热更新解决方案中,Lua 和 ILRuntime 方案的本质是什么?
请解释 Unity 中的 Prefab 是什么,以及它在游戏开发中的作用是什么?
在 Unity 中,什么是 Shader?它有什么作用,以及如何编写一个基本的 Shader?
在 Unity 中,什么是常见的性能优化技巧?请举例说明。
在 Unity 中,什么是协程(Coroutine)?它有什么作用,以及如何使用它?
解释一下 Unity 中的渲染管线(Rendering Pipeline)是什么,如何使用它,并举例说明它在游戏开发中的应用场景。
CPU 和 GPU 他们分别是什么?
他们主要完成什么工作渲染管线中的几何阶段是由 CPU 主导还是 GPU 主导?该阶段主要是在做什么?
是不是所有矩阵都有逆矩阵?
如何计算一个矩阵的逆矩阵?齐次坐标是什么?
对于我们有什么作用?Shader 开发中的坐标空间变换,主要是在哪几个空间中进行变换?变换顺序是什么?
Unity 中的 Lerp 和 Slerp 分别是什么?
Unity 底层是单线程还是多线程
如何在 Unity 中实现多语言支持?
(不同国家的人,看到的游戏内的语言是不一样的)Shader 当中的顶点和片元着色器有什么作用?
Unity 目前版本中创建的普通项目、URP 项目、HDRP 项目的区别是什么?
在 Unity 中,有时在第一次执行 GameObject.Instantiate 的时候有明显卡顿,该怎么解决?
在 Unity 中 AssetBundle 的压缩方式有不压缩、LZMA、LZ4 三种,请问 LZMA 和 LZ4 有什么区别?
Unity 中 DrawCall、Batches、SetPass Calls 的意思是什么
Unity Shader 中,深度测试是在做什么?
Unity Shader 中
某片元通过了深度测试,但是没有开启深度写入,该片元的颜色信息是否写入到颜色缓冲区?Unity 中摄像机组件中的投影(Projection)参数
其中的两个选项
透视投影(Perspective)和 正交投影(Orthographic)
有什么区别?FSM 和 BT 指什么?
他们是用来处理什么的?10000 个 monobehavior,每个各自执行 update,和放到一个 update 里执行,哪个效率更高?
为什么?我们在编写代码时,有什么常用的优化代码性能的手段?至少说出 3 点
OpenGL 和 DX 的最大区别是什么?
Unity 工程文件中,meta 后缀的文件中主要存了什么信息?(最少说出 2 点)
不同后缀的各种文件的本质是什么?
UnityWebRequest 可以用来做什么?
如何在 Unity 中进行多线程编程以提高性能?(至少说出 3 点可以使用多线程提高性能的内容)
游戏开发完成后 1.游戏运行卡顿、设备发热一般往哪个大方向进行排查? 2.游戏运行一段时间后闪退,一般往哪个大方向进行排查?
你之前做过一些项目
那么一般美术同学提供给我们的美术资源,一般分为哪几类?美术同学提供给我们的模型数据中,包含哪些关键数据?(至少说出 3 点)
游戏项目中,运行时主要占内存的内容有哪些?(至少说出 5 点)
游戏项目中,主要消耗性能的内容有哪些?(至少说出 3 点)
网络游戏中,有一个数据统计界面,这些数据是由最近 1000 场战斗计算出来的平均数据
你认为以下处理方式合理吗?如果不合理,应该如何改进?
我们通过向后端请求这 1000 场战斗的数据,然后在客户端计算相关平均数据,更新显示到统计界面上如果在 Unity 当中制作 FPS 游戏,如何模拟枪械开枪时的后坐力
Unity 当中存在多线程时,继承 MonoBehaviour 的脚本是否有必要对其中内容加锁?为什么?
我们在 Unity 中进行一些复杂逻辑处理时,比如网路通讯、寻路算法
往往会开启多线程进行处理。
我们如何保证数据能够和 Unity 主线程进行正常交互?(请至少说出 1 种方式)Shader 当中的 Blend 渲染命令主要用来干什么?
Shader 当中的 Blend 渲染命令后面跟的参数是用来干嘛的?
比如:
Blend SrcAlpha OneMinusSrcAlphaUnity 生命周期函数中的 OnEnable 和 Start,我们在使用时应该如何选择?
可以举例说明如果你要开发一个项目
Assetbundle 和 Addressables 你会如何选择?网络通讯中分包黏包指的是什么?
我们应该如何解决这些问题?TCP 和 UDP 通讯最大的区别是什么?
如果想要让 UDP 通讯具备 TCP 的优点,应该如何处理?
Unity 在发布 Android 平台项目时,
在加载 Application.streamingAssetsPath 中文件时我们应该注意什么?
Unity 中安卓主流的纹理压缩格式 ETC 和 ETC2 的主要区别是什么?
Android 平台常用压缩格式 ETC 不支持透明通道,那我们的半透明纹理应该如何处理?
Unity 中针对 IOS 平台我们使用的主流纹理压缩格式是什么?
请问为什么延迟渲染路径能够优化有大量光源的场景渲染
什么是纹理映射?
IK(逆运动学)可以帮助我们完成什么功能?
Unity 中为 Sprite 前后关系排序的常用方式有哪些?(至少说出 3 种)
请介绍一些在 Unity 中减少内存的方法。(至少说出 3 种方法)
请介绍一些在 Unity 中提升性能的方法(至少说出 5 种方法)
有 1000 瓶水其中一瓶是有毒的,喝了马上死,现在用小白鼠来测试哪一瓶有毒。最少需要用多少只小白鼠才能测出哪一瓶是有毒的水
如何为 UGUI 中的某一个控件添加自定义事件监听(比如为一个 Image 添加点击事件)
我们在进行 UI 开发时,每个面板都会有很多控件(Button、Toggle、Slider 等等)
每新写一个面板逻辑,都会为这些控件做一些相同的事情,比如:
声明控件、查找控件、监听控件等等
请问:我们应该如何提升我们的开发效率,让这些事情不用每次都去做?
(至少说出两种方案)正交矩阵的基本概念是什么?
它对我们来说有什么意义?Shader 和材质球的关系是什么?
Transform 中的本地坐标系的方向 转换 为相对世界坐标系的方向 的两个 API
TransformVector() 和 TransformDirection()
有什么区别?lua 语言中的 upvalue 是什么?
该 Unity 中的报错是什么意思?如何定位该问题?我们一般如何排查解决该问题?(至少说出 2 种方案)
在 Android 平台上运行的项目出现问题,我们有几种调试的方式?
(至少说出 3 种方案,不使用第三方插件)使用 UnityWebRequest 加载音效文件,应该使用什么 API?
Untiy 中的 PlayerPrefs 支持存储什么类型的数据?
为什么我们一般不会使用它来制作角色数据存档功能?在进行数据持久化时(存档、数据存储等功能时)
如果使用
Unity 中的 JsonUtility(Json)
C#中的 BinaryFormatter(2 进制)和 XmlSerializer (xml)
这些公共类进行序列化和反序列化时
如果在反序列化时,对应的数据结构类发生变化了,是否影响数据的读取?游戏在设备上运行时,出现崩溃闪退现象,排查方向有哪些?(至少说出 2 点)
游戏在设备上运行时,出现卡顿掉帧现象,排查方向有哪些?(至少说出 2 点)
在进行游戏开发时,我们一般如何测试项目在目标设备的最大内存上限和性能上限?
Unity 中如果想要改变物理系统中默认重力的方向或大小,应该在哪里修改?
Unity 中动态批处理和静态批处理的区别?
Unity 发布后的应用程序的美术表现效果比在编辑器中看起来差,可能原因有哪些?
Unity 中线性颜色空间和伽马颜色空间的主要区别是什么?
为什么线性的表现效果更好,Unity 默认还是使用的伽马呢?
Lua
请说出 Lua 中常用的数据类型(至少说出 6 种)
Lua 中 pairs 和 ipairs 的区别
Lua 中常用的元方法有哪些?至少说出 3 个原方法
Lua 中元表的作用
Lua 中 **index 和 **newindex 有什么作用