当前位置: 首页 > news >正文

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

1.静态合批与动态合批的原理是什么?有什么限制条件?为什么?对CPU和GPU产生的影响分别是什么?
原理:Unity运行时可以将一些物体进行合并,从而用一个描绘调用来渲染他们,就是一个drawcall批次。
限制条件:
静态:不移动,相同材质
动态:较大顶点开销,仅支持小于900顶点网格物体,顶点着色器使用属性越多,顶点开销数量限制越大,
也要相同材质,不同缩放尺度不能动态合批。

原因:相同材质,纹理相同,同时渲染。同时运行着色器代码。
cpu: 减少cpu提交drawcall
gpu:让gpu一次搞定,减少等待时间。

2.一个正方体多少个顶点和三角形,为什么?如何合并顶点?
24(38),12(62)
顶点24原因:立方体上贴一张二维图形会走样,所以每个面重复贴一张,一个顶点同时是三张图片uv,所以需要三个顶点,三组UV。三顶点重合。

3.相机中如何做分层渲染?底层原理是什么
多相机控制图层渲染不同图层的内容,原理:应该跟双缓冲区有关系吧,相机渲染的区域修改颜色缓冲区,不渲染的使用黑边。

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#文件
2. 反射方法
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运算速度快,内存读写跟不上。
缓存命中:请求数据在缓存中。 不在会请求内存先写入缓存在返回。

http://www.lryc.cn/news/445732.html

相关文章:

  • 如何查看线程
  • 详细分析Spring的动态代理机制
  • Redis数据类型,使用场景,事物及分布式锁
  • 目标检测系列(一)什么是目标检测
  • STM32CubeIDE | 使用HAL库的ADC读取内部传感器温度
  • 茶思屋直播|TinyEngine+AI:聚焦主航道,在实践中探索低代码技术黑土地
  • Ansible流程控制-条件_循环_错误处理_包含导入_块异常处理
  • Mybatis-为什么使用Mybatis,它存在哪些优点和缺点?
  • 银河麒麟高级服务器操作系统V10外接硬盘挂载指南
  • 免费制作证件照的小程序源码
  • 面经宝典【1】-拼多多
  • AI画图用到的网站与资源
  • C++——多线程编程(从入门到放弃)
  • 江协科技STM32学习- P14 示例程序(定时器定时中断和定时器外部时钟)
  • 2024年CSP-J认证 CCF信息学奥赛C++ 中小学初级组 第一轮真题-阅读程序题解析
  • Hive ROW_NUMBER() 简介
  • java是干什么的
  • AI与量化投资人才培养计划-连接职场 助力走在金融行业前沿
  • 《CUDA编程》2.CUDA中的线程组织
  • 学习篇 | Dockerized GitLab 安装使用(简单实操版)
  • Linux服务器磁盘扩容
  • Redis的一些数据类型(一)
  • 论文复现:考虑电网交互的风电、光伏与电池互补调度运行(MATLAB-Yalmip-Cplex全代码)
  • HTTP 协议介绍
  • 解决windows上VMware的ubuntu虚拟机不能拷贝和共享
  • Python+rust会是一个强大的组合吗?
  • 引用和指针的区别
  • 内容生态短缺,Rokid AR眼镜面临市场淘汰赛
  • 【论文阅读】StoryMaker | 更全面的人物一致性开源工作
  • 读构建可扩展分布式系统:方法与实践14流处理系统