面试问题汇总

最近面试了几家公司,对问到的问题汇总一下。

Unity 是左手坐标系还是右手坐标系?

这个题靠记忆答的答错了,是左手坐标系。
大拇指指的方向是X轴,食指指的方向是Y轴方向,中指指的方向Z轴方向。
请添加图片描述

场景中游戏物体Activity为false,GameObject上的组件是否会实例化?

组件会被实例化,可以在组件中写构造函数,在构造函数中打日志验证。但是组件中的Awake、Start 函数并不会执行。

DrawCall 是什么?

DrawCall 是CPU准备数据向命令缓存区添加命令,GPU读取命令并执行渲染的过程。其中准备数据包括加载渲染对象、设置渲染状态。
加载渲染对象需要从硬盘加载到内存,从内存加载到显存。
设置渲染状态 设置渲染对象的材质、纹理、着色器。

DrawCall 为什么慢?

DrawCall 过程中,CPU像命令缓存区添加命令,GPU执行渲染,这个过程中CPU的运行要比GPU缓慢的多,导致GPU一直在等待CPU。所以要减少DrawCall 也就是减少等待GPU等待时间。

描述一下批处理,说下静态批处理与静态批处理的区别? (被问两次)

不论是静态批处理还是动态批处理都需要相同的材质。
- 静态批处理
需要勾选Static
静态合批会生成合并网格(造成内存损耗)。
- 动态批处理
仅支持顶点数小于900的网格物体

Unity的渲染管线? (被问两次)

渲染管线的工作室将3D模型转换成2D图像并显示在屏幕上。
渲染管线分为向前渲染管线与延时渲染管线。
向前渲染管线是每一帧都会对场景中所有物体进行渲染,延时渲染是将场景在中的物体存储在缓冲区,再进行渲染。
向前渲染管线的工作流程

  1. 几何处理
    几何处理时将3D模型的定点转换成屏幕坐标的过程。这个过程通常包括顶点变换,裁剪,投影和视口变化等步骤。其中定点变换是将3d模型的顶点从模型空间转换到世界空间和相机空间的过程。裁剪是将超出相机视锥体返回的顶点丢弃的过程。投影是将3d模型的顶点从相机空间转换到裁剪空间的过程。视口变换是将裁剪空间的坐标转换成屏幕坐标的过程。
  2. 光栅化
    光栅化是指将3d模型的3角形转换成像素的过程,这个过程通常包括三角形裁剪、三角形设置、三角形遮挡检测和颜色插值等步骤。其中,三角形裁剪是将超出屏幕范围的三角形丢弃的过程。三角形设置是将三角形像素坐标和纹理坐标计算处理的过程。三角形遮挡检测是将被其他物体遮挡的三角形丢弃的过程。颜色插值是将三角形内的像素的颜色计算的过程。
  3. 像素处理
    像素处理是指对每个像素进行处理的过程。这个过程通常包括纹理采样、光照计算是将光照效果应用到像素的过程。像素混合是将像素的颜色和深度值与之前的像素进行混合的过程。

项目中的资源管理怎么处理的?(被问两次)

不知道怎么说,ab,resource 。引用计数方法。。。市面上很多现成的资源管理插件,GF只带强大的资源管理,XAsset资源管理 YooAsset资源管理。

向量的点积和叉积的物理含义?

假设有向量a 和向量b

  • 点积
    点积的结果是标量。表示 a 在 b方向的投影长度。可以计算表示两向量的方向是否相同

    1. a * b > 0 表示方向基本相同,夹角在0~90度之间
    2. a * b = 0 表示两向量垂直
    3. a * b < 0 表示方向基本相反,夹角在90~180度之间

    公式
    a ⋅ b = x 1 x 2 + y 1 y 2 + z 1 z 2 a · b = x₁x₂+y₁y₂+z₁z₂ ab=x1x2+y1y2+z1z2
    a ⋅ b = ∣ a ⃗ ∣ ∣ b ⃗ ∣ c o s θ a · b = |\vec{a}| |\vec{b}| cosθ ab=a ∣∣b cosθ

  • 叉积
    叉积是一个新的向量。叉积的模等于两向量构造的平行四边形面积。
    叉积的公式有个记法。 写两遍 xyzxyz
    然后
    第一个字母开始 xy => z
    第二个字母开始 yz => x
    第三个字母开始 zx => y
    前面的字母表示相乘,后面的字母表示应该在哪个轴
    ( a x , a y , a z ) × ( b x , b y , b z ) = ( a y b z − a z b y , a z b x − a x b z , a x b y − a y b x ) (a_x,a_y,a_z) ×(b_x,b_y,b_z) = (a_yb_z-a_zb_y,a_zb_x-a_xb_z,a_xb_y-a_yb_x) (ax,ay,az)×(bx,by,bz)=(aybzazby,azbxaxbz,axbyaybx)
    设有向量a 与向量 b 两向量的叉积为 c向量
    则有公式
    ∣ c ⃗ ∣ = ∣ a ⃗ ∣ ∣ b ⃗ ∣ s i n θ |\vec{c}|=|\vec{a}| |\vec{b}| sinθ c =a ∣∣b sinθ

UI屏幕适配?

UI 屏幕适配 有四种
1. 按固定宽比例适配
2. 按固定高比例适配
3. 取 宽 高比例的最小值进行缩放 这种方式最安全
4. 取 宽 高比例的最大值进行缩放 宽高可能会超出屏幕外

正交摄像机与透视摄像机的区别?

正交摄像机没有透视效果,一般用来制作2d游戏
透视摄像机有透视效果

摄像机的远近截面该怎么设置?

我有点懵,在网上没找到合适的答案,我觉的合适就好,离摄像机近就大,离摄像机远就小。

怎么让3D物体显示在UI上面?

如果是FGUI,有占位符 使用 GoWapper 这个类可以让3d物体显示在UI上面。
如果是UGUI,可以使用深度更高的摄像机,这个方法,不能出现UI遮挡,还可以使用 RenderTexure 来处理。
如果是用精灵渲染器来做UI 可以修改渲染器的 Order In Layer

遇到的难题是什么,怎么解决的?

嗐、一时间我也想不起遇到过什么难题,怎么解决的了。

描述一下GC过程?

单独写个文

描述一下ECS?

E表示实体,C表示组件,S表示系统。
其中组件中只存储数据挂在实体上。E表示实体,用来添加组件来实现功能。S表示系统,用来处理逻辑修改数据。ECS中通常还要个游戏世界类用来管理所有的实体,已经触发系统逻辑。
ET框架中 弱化了EC概念,一切皆实体。实体上可以挂载组件,组件上可以挂载实体。其中系统是用接口实现,以及扩展方法来处理的。

描述一下MVC?

M表示Model,V表示视图,C表示控制器。
其中Model是用来存储数据,并提供操作逻辑支持。视图提供用户交互,显示等处理。控制器是Model与视图之间的桥梁。用来控制展示界面。

常用的设计模式?

单例模式、原型模式、建造者模式、状态模式、观察者模式。
详细看这:https://blog.csdn.net/qq_27461747/article/details/130834461

Socket 与 WebSocket 的区别?

Socket 是协议控制层
WebSocket 是应用层
WebSocket 是更高层的协议,更简单易用。Socket 更容易扩展。

怎么加载一个外部音频文件。

WebRequest 进行下载后得到 byte[], 可以转换为 AudioClip。
面试官还问我怎么转。。。 这谁记得

贪吃蛇玩法设计

二维数组定义格子。有点定义,点类下面有一个属性,表示空的格子,蛇,或者是食物。
每隔一定时间,蛇头按按键上下左右控制往前填充一格,如果填充的格子没有食物,蛇的末尾格子设置为空格。如果填充的格子有食物,在空格中找个随机找个格子设置为食物。如果填充的格子是蛇,那么游戏结束。

A*算法 简单说说

详细看这:https://blog.csdn.net/qq_27461747/article/details/106690890

说说Layer的见解

Layer 一般来做两个事,一个是控制摄像机可设置可以现实的Layer。另一个是可以设置 相互可碰撞的层。

Monobehavior生命周期

Awake Start enable Update LateUpdate FixedUpdate disable OnDestroy
Awake 如果GameObject在启动的时候是Activity false不会被调用
Start 如果组件在启动的时候enbale = false 时不会被调用
enable 和 disable 是一对函数 一个是组件启用的时候调用 一个是组件禁用的时候调用
OnDestroy 和 Awake 是一对函数,如果组件执行了Awake 那么在组件销毁时会执行OnDestroy, 如果未执行过Awake那么将不会执行OnDetroy。
Update 是每帧更新
LateUpdate 是在Update 之后执行的更新 LateUpdate 一般用来做摄像机的跟随
FixedUpdate 是固定帧,不受帧率影响,如果用到物理方面的东西,需要在FixedUpdate中处理。

Update LateUpdate FixedUpdate 三个一般在什么时候使用

答案在上面

下次面试到新题再做补充

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值