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秋招)相关推荐

  1. 前端面试分享:秋招总结(html和css篇)

      今年秋招结束了,虽然拿到的offer不多,不能和大佬们相比,但是自己已经满足了.秋招的过程中一直在总结面试遇到的一些问题,今天按照知识板块做一个整理,希望能有助于要求职的各位. 一. Html相关 ...

  2. 找异数java_小米19秋招java开发~ 分享笔试题希望春招有好运

    1.一个作业系统中有4台打印机,每个作业需要独占2台打印机才能完成,则该系统最多可以同时执行多少作业而保证不会死锁?(A) A. 3 B. 1 C. 2 D. 4 2.假设一个无向图中包含12个顶点, ...

  3. 面经+经验分享|2019秋招算法岗复盘

    一.背景介绍 我这几天就要去公司入职了,岗位是人工智能工程师,曾参加了2019年校园招聘.转眼间,2020届校园招聘也马上开始了,我想把自己找工作的一些经历分享出来,算是对我2018年下半年找工作经验 ...

  4. 【笔试】备战秋招,每日一题|20230415携程研发岗笔试

    前言 最近碰到一个专门制作大厂真题模拟题的网站 codefun2000,最近一直在上面刷题.今天来进行2023.04.15携程研发岗笔试,整理了一下自己的思路和代码. 比赛地址 A. 找到you 题意 ...

  5. java笔试-小红书秋招笔试-9.6(子矩阵索引、未出现的最小自然数、航海危险区)

    java通关整理汇总-Java基础.计算机网络.数据库.设计模式.框架.算法模板.笔试 1.给定一个数组,找出两个索引位置,使得这之间的元素排序后,数组是升序 只有78%,一直报时间超限 public ...

  6. Java笔试——2021届秋招编程题汇总

    文章目录 1. 硬币找零,最少多少张纸币 2. 将序列排序 3. 判断两个矩形是否相交 4. 从字符串中提取整数 5. 编写注册验证功能 6. 分解数字相乘后的最大值 1. 硬币找零,最少多少张纸币 ...

  7. java笔试-众安保险秋招笔试9.4

    一个半小时一共5道编程题 2.最长重复字串 package zhongan;import java.util.Scanner;/*** @author liu* @Description*/ publ ...

  8. 【秋招纪实录】一篇特别正经的【基恩士】求职经验分享

    本篇推文共计2000个字,阅读时间约3分钟. 01 求职关键词 基恩士 销售工程师岗 2020年秋季校园招聘 已取得offer 02 企业科普 随着工业自动化方面的迅速发展,KEYENCE作为传感器和 ...

  9. 面经—CV秋招40万+offer上岸经验:分享100道CV最新面试题

    自己的个人情况 本硕双非院校.非计算机类的专业,本科拿过国奖,硕士(2020年-2022年)的研究方向NR-IQA based on deep learning,一篇CV方向SCI 3区: 两段学习经 ...

最新文章

  1. es任务 如何kill_kill进程的方法
  2. 【遇到问题】ORA-27102 ORA-01034
  3. Django从理论到实战(part2)--virtualenvwrapper
  4. MOS管驱动电路总结
  5. java数组及Arrays创建一个int 类型数组 数组元素由键盘录入,每次打印插入排序的结果(数组扩容,数组排序,键盘录入)
  6. 03-17 APP自动遍历测试技术
  7. 设计模式之“单例模式”
  8. 【好文翻译】二十年来我得到的20条编程经验
  9. GCC Spec Files
  10. 开源电脑屏幕录制软件Captura源码下载及编译(Win10,VS2022)
  11. 在sap系统设置纸张打印格式(针式打印机)
  12. excel sumifs多条件求和
  13. python人工智能面试题爱奇艺面试题_经典算法题:爱奇艺研发工程师算法笔试题...
  14. 用CSS 实现水波扩散的特效
  15. HTML,CSS,JS实现网页聊天窗口
  16. 怎么做接口自动化的?
  17. Python-正则表达式
  18. 如何使用egg.js开发后端,包含连接数据库
  19. Python @property 用法
  20. ISO9001质量认证的详细步骤流程

热门文章

  1. 任务流程管理,从冗杂的项目管理中解脱出来
  2. 用头部运动学习无姿态注视偏差
  3. HP1020 硒鼓加粉完全拆解图解
  4. 姿态检测 树莓派_基于深度学习的树莓派老人摔倒检测系统的制作方法
  5. 【开源分享】一套标星 11.2k 的公有云文件系统
  6. java图片识别(文字、字母、数字)
  7. linux wenj 立即生效_OpenIdConnect 认证启用 HTTPS 回调 RedirectUri 不生效问题解决
  8. 线上flink任务重启报错(Hadoop问题)java.lang.NumberFormatException: For input string: “30s“
  9. oracle学习(一)
  10. 解决谷歌翻译不能用的方法