91Act客户端笔试分享(19秋招)
1.假设你在制作一款FPS手游,请基于如下代码,回答下列问题。回答程序代码问题时,实现语言不限。
const float MAX_VISION_DISTANCE = 10;
const float MAX_VISION_ANGLE = 45;struct vec
{
float x;
float y;
float z;
}vec vecAdd(const vec& a, const vec& b);
vec vecSub(const vec& a, const vec& b);
float vecDot(const vec& a, const vec& b);
vec vecCross(const vec& a, const vec& b);
vec vecNormalize(const vec& a);
float vecLength(const vec& a);
对于游戏的AI部分,当玩家进入到AI角色的扇形视野范围内时,AI需要作出相应的反应。请实现下列位置判断函数,检查玩家位置是否在AI角色的扇形视野范围内:
bool IsPlayerInVision(const vec& aiPosition, const vec& aiDirection, const vec& playerPosition)
2.当玩家射击时,如果子弹从AI角色身旁近身飞过,AI需要作出反应。请实现下列判断函数,检查子弹是否是在一定距离内(NEAR_MISS_DISTANCE),从AI身旁飞过。
const float NEAR_MISS_DISTANCE = 2;bool IsBulletNearMiss(const vec& aiPosition, const vec& bulletOriginPosition, const vec& bulletDirection);
3.对于AI角色整体行为,策划决定设计为:普通情况下,他按既定路线巡逻;当发现玩家在视野范围内后追击玩家;当距离靠近到一定范围内时对玩家射击;若命中玩家或玩家离开视野,则回到巡逻路线;若玩家射击AI角色,子弹命中被击杀,子弹近身飞过则播放受惊吓动画。
请简述你在程序上会通过怎样的方法来实现这段策划需求。然后通过简要的伪代码或者画图表的方式,表述你实现方法中的主要逻辑。
- 抽象出AI的状态,即:巡逻、追击玩家、射击、被击杀、受惊吓,以及这些状态之间的转移条件:发现玩家、接近玩家、命中玩家、被子弹击中等。
- 实现这些逻辑
- 用behaviortree或playmaker等插件,将这些逻辑抽象为节点,提供给策划进行节点的自由组合
4.在游戏中会出现约1000个AI角色,玩家需要不断跟踪距离最近的100个AI角色,因此这100个AI角色会随时变化。请描述你会通过什么数据结构(比如链表,连续数组,等等)来实现,以及这种数据结构会利于对这100个AI角色元素进行哪种类型的操作。
hashtable,除了初次建表耗时稍多以及空间稍多之外,插入删除查询操作的时间复杂度都是O(1)
5.假如在不断追踪AI角色的过程中,因为数量较大,出现了性能瓶颈,导致帧率较低,需要你调查。请简述你的解决方案。
- 将AI追踪角色的每帧轮询减少为固定时间间隔轮询,如每隔0.5秒追踪一次
- 限制AI追踪角色的条件,如至少在一定距离内才追踪(其实就是让其休眠)
- 将AI追踪角色分解为搜索玩家->向玩家移动->其他逻辑,如果在搜索玩家阶段没有找到,则不进行之后的逻辑
6.在这款FPS游戏的所有程序实现上,请简述你觉得可以使用的设计模式,以及对应的具体场景,和使用它的意义。
- 状态模式:将实体的行为分解到不同状态中,方便管理不易出错,容易修改,可复用(如敌人B除了外观不同,与敌人A的行为逻辑一致,或者说有不少共同状态如待机、追踪等,那么即可复用这些逻辑)
- 对象池模式:缓存子弹等经常创建、销毁的物体,减少GC
7.如果这款射击游戏支持多人联机PVP模式。你会使用TCP还是UDP网络协议,这样选择的优势和劣势有哪些?
8.在PVP模式中,你会通过怎样的网络同步机制来实现玩家与玩家之间的同步,为什么选择这种方法。除此以外,你是否还了解其他的同步方法,以及此方法适合的游戏类型/特征。
9.在你之前的开发经历中,遇到过哪些棘手的问题,简述你是怎样解决的。(比如,在开发的程序运行时,有时会出现莫名其妙的闪退(Crash)现象。运行的结果不符合预期,你花了很长时间才解决。)
10.在这款游戏的开发过程中,如果可以使用任意语言完成不同游戏模块(比如基础框架,Gameplay,UI,网络通信,等等)、工具(比如pipeline中可以引入的自动化处理脚本,编辑器,等等)的制作。请描述你更愿意或熟悉在哪个部分使用哪种语言,以及为什么选择这款语言完成这部分工作。
- 网络通信:C++,效率优先
- GamePlay:用支持热更新的语言,如Lua,因为GamePlay改动需求多
- 不经常变更的主要模块:用引擎的脚本所支持的语言
11.如果游戏是用Unity引擎开发,发现游戏中渲染效率低下,且和DrawCall相关,请简述你可能会采用的优化方法。
12.请简述Unity中协程(Coroutine)的用途,使用方法,和你会使用它的场景。
- 用途:可以很方便地让一段逻辑以异步的方式执行
- 使用场景:资源加载、延时逻辑等不希望阻塞主线程的行为
- 使用方法:WaitForSeconds实现通用的逻辑延迟
13.是否有在Unity中编写过Shader?如果有,请简述vertex shader和fragment shader的用途。
14.是否了解Unity工程中Native插件的工作原理?以及如果开发过,请列举开发过Native的插件。
来源:
- 91Act客户端笔试分享(19秋招)牛客网 作者:我猜你不知道
http://www.taodudu.cc/news/show-4666583.html
相关文章:
- ACT开发初步(一)
- 关于arpg以及act游戏中怪物设定的一些思考
- ACT游戏引擎设计及DEMO展示
- 《鬼泣-巅峰之战》产品分析:如何将ACT游戏改编成ARPG手游
- 虚幻4学习日志2021.3.29 为这个ACT游戏结个尾
- [Unity3D]Unity3D游戏开发之ACT游戏三连击效果实现综述
- 我认为ACT游戏开发必用的程序设计模式!!!
- Animator:ACT游戏三连击效果实现综述
- php 科试题,科学网—《数据库系统原理与技术》试题库试题与参考答案选编6 - 程学先的博文...
- 激活win10管理员身份
- Windows10磁盘图标感叹号,Bitlocker提示等待激活
- Win10 图标整理
- 解决WIn7无线网图标显示不正确的问题
- 2008春节祝福短信 鼠年春节祝福语
- 手机中保留的短信
- 关于发短信的软件(zz)
- 49条搞笑短信
- 免费发短信的黑幕
- 48条搞笑短信
- 用php写圣诞祝福页面,2018最美的圣诞节祝福网页【圣诞节祝福语_圣诞节祝福短信】...
- 精品短信。
- 手机短信48则
- 2008最新鼠年春节拜年短信大全
- 袋鼠云日志助力云南某金融机构日志平台建设,实现核心业务系统运维智能化...
- 智能运维案例系列 | 新网银行 X 袋鼠云:银行核心业务系统日志监控平台建设实践...
- 经典短信笑话
- 搞笑短信
- 短信
- 严重警告:大家不要使用任何形式的免费发短信的软件[转贴]
- 蛟分承影,雁落忘归——袋鼠云一站式全自动化运维管家ChengYing(承影)正式开源
91Act客户端笔试分享(19秋招)相关推荐
- 前端面试分享:秋招总结(html和css篇)
今年秋招结束了,虽然拿到的offer不多,不能和大佬们相比,但是自己已经满足了.秋招的过程中一直在总结面试遇到的一些问题,今天按照知识板块做一个整理,希望能有助于要求职的各位. 一. Html相关 ...
- 找异数java_小米19秋招java开发~ 分享笔试题希望春招有好运
1.一个作业系统中有4台打印机,每个作业需要独占2台打印机才能完成,则该系统最多可以同时执行多少作业而保证不会死锁?(A) A. 3 B. 1 C. 2 D. 4 2.假设一个无向图中包含12个顶点, ...
- 面经+经验分享|2019秋招算法岗复盘
一.背景介绍 我这几天就要去公司入职了,岗位是人工智能工程师,曾参加了2019年校园招聘.转眼间,2020届校园招聘也马上开始了,我想把自己找工作的一些经历分享出来,算是对我2018年下半年找工作经验 ...
- 【笔试】备战秋招,每日一题|20230415携程研发岗笔试
前言 最近碰到一个专门制作大厂真题模拟题的网站 codefun2000,最近一直在上面刷题.今天来进行2023.04.15携程研发岗笔试,整理了一下自己的思路和代码. 比赛地址 A. 找到you 题意 ...
- java笔试-小红书秋招笔试-9.6(子矩阵索引、未出现的最小自然数、航海危险区)
java通关整理汇总-Java基础.计算机网络.数据库.设计模式.框架.算法模板.笔试 1.给定一个数组,找出两个索引位置,使得这之间的元素排序后,数组是升序 只有78%,一直报时间超限 public ...
- Java笔试——2021届秋招编程题汇总
文章目录 1. 硬币找零,最少多少张纸币 2. 将序列排序 3. 判断两个矩形是否相交 4. 从字符串中提取整数 5. 编写注册验证功能 6. 分解数字相乘后的最大值 1. 硬币找零,最少多少张纸币 ...
- java笔试-众安保险秋招笔试9.4
一个半小时一共5道编程题 2.最长重复字串 package zhongan;import java.util.Scanner;/*** @author liu* @Description*/ publ ...
- 【秋招纪实录】一篇特别正经的【基恩士】求职经验分享
本篇推文共计2000个字,阅读时间约3分钟. 01 求职关键词 基恩士 销售工程师岗 2020年秋季校园招聘 已取得offer 02 企业科普 随着工业自动化方面的迅速发展,KEYENCE作为传感器和 ...
- 面经—CV秋招40万+offer上岸经验:分享100道CV最新面试题
自己的个人情况 本硕双非院校.非计算机类的专业,本科拿过国奖,硕士(2020年-2022年)的研究方向NR-IQA based on deep learning,一篇CV方向SCI 3区: 两段学习经 ...
最新文章
- es任务 如何kill_kill进程的方法
- 【遇到问题】ORA-27102 ORA-01034
- Django从理论到实战(part2)--virtualenvwrapper
- MOS管驱动电路总结
- java数组及Arrays创建一个int 类型数组 数组元素由键盘录入,每次打印插入排序的结果(数组扩容,数组排序,键盘录入)
- 03-17 APP自动遍历测试技术
- 设计模式之“单例模式”
- 【好文翻译】二十年来我得到的20条编程经验
- GCC Spec Files
- 开源电脑屏幕录制软件Captura源码下载及编译(Win10,VS2022)
- 在sap系统设置纸张打印格式(针式打印机)
- excel sumifs多条件求和
- python人工智能面试题爱奇艺面试题_经典算法题:爱奇艺研发工程师算法笔试题...
- 用CSS 实现水波扩散的特效
- HTML,CSS,JS实现网页聊天窗口
- 怎么做接口自动化的?
- Python-正则表达式
- 如何使用egg.js开发后端,包含连接数据库
- Python @property 用法
- ISO9001质量认证的详细步骤流程
热门文章
- 任务流程管理,从冗杂的项目管理中解脱出来
- 用头部运动学习无姿态注视偏差
- HP1020 硒鼓加粉完全拆解图解
- 姿态检测 树莓派_基于深度学习的树莓派老人摔倒检测系统的制作方法
- 【开源分享】一套标星 11.2k 的公有云文件系统
- java图片识别(文字、字母、数字)
- linux wenj 立即生效_OpenIdConnect 认证启用 HTTPS 回调 RedirectUri 不生效问题解决
- 线上flink任务重启报错(Hadoop问题)java.lang.NumberFormatException: For input string: “30s“
- oracle学习(一)
- 解决谷歌翻译不能用的方法