前言
你好,我是小莱,上回咱们经历了C++和算法的严刑拷打,这回来看看面试游戏客户端会有哪些特色问题,大家面试之前心里也能有个底。这部分考验思维能力和游戏开发相关素养,不是必选项但可以是加分项,简历通过筛选后,只会根据简历上的内容提问。
知识点
5. 给出四个点坐标,如何判断一个点在不在另三个点构成的三角形内?
-
面积法:计算 ΔABC 和点 P 与 ΔABC 的各个子三角形 PAB、PBC 和 PCA 的面积。若这三个子三角形的面积之和等于 ΔABC 的面积,则点 P 在三角形内。
-
同侧法:对于三条边向量 AB,BC,CA,点P需要在向量的同侧(如顺时针方向)。而向量叉积的符号反映了向量的旋转方向或位置,可以计算点 P 和点 A 关于边向量BC的叉积,比如 PB×BC 和 AB×BC 的结果正负性相同,认为点 P 和点 A在BC同侧。
-
射线法:从点 P 发射一条射线,计算射线与三角形边的交点数量。如果交点数量是奇数,则点 P 在三角形内部;如果是偶数,则在外部。
6. 抽奖中奖概率10%,抽三次能中奖的概率是多少?
抽三次能中奖、抽第三次能中奖和抽三次都能中奖分别是三种情景,能中奖意味着至少中一次奖即可,所以逆向思维使用1减去不能中奖的概率,答案是1−0.9的三次方大约是 27.1%。
开发岗一般不会考复杂的组合计数和概率论问题,可能考到的有古典概型、几何概型、伯努利概型和高中水平的排列组合问题,这道题属于伯努利概型。
7. A*算法是怎么实现的,是最优的吗?
A*算法是游戏开发中的常见寻路算法,它综合了Best-first search和Dijkstra算法的优点:在进行启发式搜索提高算法效率的同时,可以保证找到一条最优路径。
-
A*算法的核心思想是,在 广度优先搜索(bfs) 的基础上,每一步都选择总代价最低的节点走,代价公式为 f(n) = g(n) + h(n) ,其中n表示当前节点,g和h分别表示已经付出的实际代价和预测未来要付出的剩余代价。
-
g 可以量化为已经走过的路径长度,h(n) 被称为启发式函数,因为有这个启发式函数,A*算法被称作启发式搜索算法,h(n)=0 则退化为 Dijkstra 算法。
是最优的吗?
-
A* 算法在空间利用和效率上并不是最优的,空间上有优化版——迭代加深A(Iterative Deepening A),时间上有——跳跃点搜索(Jump Point Search, JPS);结果上是否最优取决于启发式函数的选择。例如在网格图寻路的场景下,启发式函数通常使用当前网格到终点的欧拉距离或者曼哈顿距离,此时结果是最优的。
-
一个可接受的启发式函数永远不会高估从任何节点到目标节点的最短路径的剩余成本,这是确保算法找到最优解的关键属性。由于要求启发式函数是可接受的,所以可以认为A*算法保证会找到最优解。
8. unity3D:monobehavior的生命周期是什么?让角色移动的话,除了在update内执行移动还能在哪移动?
这方面我并不专业,感兴趣建议参考文末官方中文文档学习。
生命周期(一些常用的):
-
Start()
:在脚本首次启用时调用,通常用于执行开始游戏时的初始化操作。 -
Update()
:如果脚本启用,每帧调用一次,用于执行每帧更新的游戏逻辑。 -
FixedUpdate()
:用于物理计算且独立于帧率的更新,与物理更新同步,通常用于移动刚体。 -
LateUpdate()
:在调用所有Update
函数后调用。
9. lua的类是怎么实现的?
这方面我也不专业,建议参考文末资料学习。
-
Lua 的表(table)是一种非常灵活的数据结构,可以用 table 来描述对象的属性。
-
Lua 中的 function 可以用来表示方法,那么Lua中的类可以通过 table + function 模拟出来。
-
至于继承,可以通过元表(metetable)模拟出来。
-
Lua 中的表在某种意义上就是一种对象。像对象一样,表也有状态(成员变量);对象有他们的成员函数,表也有。
代码示例:
local MyClass = {}
MyClass.__index = MyClass -- 使得 MyClass 可以作为自己的原型
function MyClass:new()
local instance = {}
setmetatable(instance, self)
return instance
end
function MyClass:method()
print("Called method on", self)
end
local obj = MyClass:new()
obj:method() -- 输出: Called method on table: 0xXXXXXX
10. 为什么想做游戏开发?
- 热情和兴趣:表达自己对游戏开发的热爱,愿意花功夫在相关技术上,希望通过工作给玩家带来快乐;
- 匹配度高:复盘经历、技术栈,最好能体现出自己就是为游戏开发而生的;
- 行业理解:如何看待游戏作为一种文化现象和艺术形式,如何看待游戏行业的未来前景。
“ I used to be an adventurer like you, then I took an arrow in the knee. ”
The End
参考资料: