游戏开发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运算速度快,内存读写跟不上。

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

相关推荐
Java Fans5 小时前
在Unity中实现电梯升降功能的完整指南
unity·游戏引擎
GrimRaider10 小时前
[Unity]TileMap开发,TileMap地图缝隙问题
unity·游戏引擎·tilemap
无敌最俊朗@10 小时前
unity3d——基础篇小项目(开始界面)
unity·游戏引擎
suzh1qian11 小时前
Unity类银河战士恶魔城学习总结(P133 Merge skill tree with Parry skill把技能树和格挡技能相组合)
学习·unity·c#·游戏引擎
泠曦れいひ11 小时前
Unity的反射机制及游戏场景
游戏·unity·游戏引擎
tealcwu11 小时前
【Unity踩坑】在Mac上安装Cocoapods失败
unity·ios·游戏引擎
作孽就得先起床12 小时前
cesium for unity的使用
unity·游戏引擎
/**书香门第*/20 小时前
cocos creator 3.8 一些简单的操作技巧,材质的创建 1
深度学习·游戏·cocos2d
白茶等风1213821 小时前
准备阶段 Profiler性能分析工具的使用(一)
unity·性能优化
云璃丶夢紡1 天前
用源码编译虚幻引擎,并打包到安卓平台
android·游戏引擎·虚幻