游戏开发2025年最新版——八股文面试题(unity,虚幻,cocos都适用)

1.静态合批与动态合批的原理是什么?有什么限制条件?为什么?对CPU和GPU产生的影响分别是什么?

原理:Unity运行时可以将一些物体进行合并,从而用一个描绘调用来渲染他们,就是一个drawcall批次。

限制条件:

静态:不移动,相同材质

动态:较大顶点开销,仅支持小于900顶点网格物体,顶点着色器使用属性越多,顶点开销数量限制越大,

也要相同材质,不同缩放尺度不能动态合批。

原因:相同材质,纹理相同,同时渲染。同时运行着色器代码。

cpu: 减少cpu提交drawcall

gpu:让gpu一次搞定,减少等待时间。

2.一个正方体多少个顶点和三角形,为什么?如何合并顶点?

24(38),12(62)

顶点24原因:立方体上贴一张二维图形会走样,所以每个面重复贴一张,一个顶点同时是三张图片uv,所以需要三个顶点,三组UV。三顶点重合。

3.相机中如何做分层渲染?底层原理是什么(3974240)

多相机控制图层渲染不同图层的内容,原理:应该跟双缓冲区有关系吧,相机渲染的区域修改颜色缓冲区,不渲染的使用黑边。

4.项目中的打包工具做了什么事情?

0.设置包签名

1.编译 dll

2.拷贝引擎dll文件

3.加密lua文件

4.设置资源ab路径,导出映射文件。

5.打包图集

6.打包ab

7.最后打包apk

5.lua的闭包是什么?闭包产生的内存泄露如何解决?

函数内使用外部变量,例如嵌套函数的父函数的变量

解决方法:函数内的局部变量都会在栈上面,函数执行后不释放引用的闭包函数,由于闭包内有引用的外部变量,闭包也不会自动释放,所以需要释放闭包函数的引用就行了。

6.、A*寻路算法的原理是什么?还知道其他寻路算法吗?

地图分块

8个方向

估价函数,估价出最适合的格子前进。两个列表,open,Close,从open中找出f(n)最小的格子,将它周边的格子加入到open中,并将自己从open中删除加入到close中,如此循环。边界判断。

Dijkstra

寻找出有向权重图中指定节点("源节点")到所有其他节点的最短路径。

https://chinese.freecodecamp.org/news/dijkstras-shortest-path-algorithm-visual-introduction/

7.什么是堆,堆排序又是怎么样的

完全二叉树,非终端结点的值不大于(或不小于)左,右孩子结点的值,数组结构。左孩子不一定小于右孩子,所以不是二叉查找树。

8.求一个大型排行榜的Top100用什么算法,过程是怎么样的

客户端:topk问题,原地建个100的最小堆解决。遍历一遍数据集合解决

服务器:不全局全服,分服。

9.lua的table的底层实现原理是什么?为什么这么设计?

array数组和hashtable(哈希表)两种数据的结合。 提高table的插入查找效率

部分整形key作为下标放在数组中, 其余的整形key和其他类型的key都放在hash表中。

10.lua与C#或C语言相互调用的底层实现原理是什么?

lua 底层c语言实现的。

C#与Lua交互过程:

C# Call Lua : 由C#文件调用Lua解析器底层dll库(由C语言编写),再由dll文件执行相应的Lua文件;

Lua Call C# :

1.Wrap方式 首先生成C#源文件所对应的Wrap文件,由Lua文件调用Wrap文件,再由Wrap文件调用C#文件

  1. 反射方法

C#与Lua交互原理:

C#与Lua进行交互主要通过虚拟栈实现,栈的索引分为正数与负数,若果索引为正数,则1表示栈底,若果索引为负数,则-1表示栈顶。

C# Call Lua:由C#先将数据放入栈中,由lua去栈中获取数据,然后返回数据对应的值到栈顶,再由栈顶返回至C#。

Lua Call C#:先生成C#源文件所对应的Wrap文件或者编写C#源文件所对应的c模块,然后将源文件内容通过Wrap文件或者C模块注册到Lua解释器中,然后由Lua去调用这个模块的函数。

代码层面:

CSharp调用Lua过程:

C#生成Bridge文件,Bridge调dll文件(dll是用C写的库),先调用lua中dll文件,由dll文件执行lua代码

C#->Bridge->dll->Lua OR C#->dll->Lua

11.装拆箱

值类型和引用类型互相转换,泛型解决。

12.哈希表

本质数组,散列函数算出索引所在位置,去除值。键值对。

13.为什么红黑树能加快查询速度

树高度少,左右子树高度相差不大于1,二叉查找树,左<中<右

14.c和lua那个占用内存更高

lua,因为lua弱类型,每个都是引用对象,并且虚拟机加载环境需要更大的内存。

15.c和lua那个更快

c,因为lua解释型要虚拟机翻译

16.lua和c交互

当C要调用Lua数据时,Lua把值压入栈中,C再从栈中取值; 当Lua调用C数据时,C要将数据压入栈中,让Lua从栈中取值

https://www.cnblogs.com/KillerAery/p/9249145.html

17.LineRender底层实现原理

顶点数组,两点确定一条直线,DDA或者Bresenham直线算法绘制像素

17.二维碰撞算法:AABB

从反面来思考,简单迅捷。

18.cpu缓存

减少处理器访问内存时间的部件,处理器发出内存访问请求时,会先查看缓存内是否有请求数据,CPU运算速度快,内存读写跟不上。

缓存命中:请求数据在缓存中。 不在会请求内存先写入缓存在返回。

相关推荐
babywang01 天前
Unity笔记--AssetBundle详解
unity·游戏引擎
淡海水1 天前
01-04-认知篇-Unity内存全景
unity·c#·游戏引擎·.net·gc
598866753@qq.com1 天前
Codex与Unity
unity·游戏引擎
淡海水2 天前
01-03-认知篇-C#内存模型深度解析
unity·c#·游戏引擎·.net·gc
淡海水2 天前
16-02-C#常用数据结构源码-附录B-源码索引速查
unity·c#·游戏引擎·il2cpp
速易达网络2 天前
无人机远程操控仿真
游戏引擎·cocos2d
警醒与鞭策2 天前
【无标题】
android·unity·性能优化·游戏引擎·perforce
zhchyun20083 天前
【Unity UI 进阶】仿 Element UI 打造企业级 Unity UI 组件库(10)
ui·unity·游戏引擎
地狱为王3 天前
Unity使用NVIDIA的Audio2Face驱动口型
unity·游戏引擎
ebiobiz3 天前
STM32F4 Unity 单元测试与多次测试失败率统计详细步骤
stm32·unity·单元测试