第一个想到的问题:

首先以unity的FPSCharactorController为例,这里规定,相机的方向中心一定是瞄准的方向中心。
设置身体的扭曲朝向相机方向,这样身体可以弯腰。你们看图中,我让玩家的身体朝向相机的瞄准方向,这样瞄准姿势动画的手臂始终保持原来的样子,这样就就偏向了左方。
那如何保证角色动画的同时,能让玩家的枪的轴向瞄准相机的准心瞄准的位置,并且看起来跟我们玩的CS那样的效果:
1.枪支瞄准相机的方向
2.玩家可以弯腰
3.角色的瞄准动画的姿势正确

来看看Unity官方是怎么解决的,好吧,哪位老兄发的官方视频居然没有字幕,不过在观看的过程中我意识到了,其实官方是用脚本控制了角色的IK关节,比如枪瞄准哪个地方,那么就用脚本控制身体的每个部分来使得姿势正确。作为一个独立开发者来说,我是百分之九十九不会这么做的,剩下那百分之一,是有可能我能有足够的精力和经验的时候来做做到这样的效果,反正游戏本身就不是真实的,何必追求绝对的真实,要真实直接去买把真枪来玩,不是更真实吗。所以这里退而求其次,有了下面的两个解决方案。

解决方案一:

让准心在枪支的射击方向

这里部分内容参考自:http://pc.52pk.com/zixun/5958180.shtml

老FPS游戏中的准星就是你手中拿着的枪的准星(还是说成"枪口"吧),这就意味着在近距离射击时会打中哪里需要玩家自己预判,而HUD上的准星只在远距离目标时会用到,为了保证准心始终不会超出屏幕外,枪支总是与相机方“向尽量”平行。

左图是老FPS,从枪口出去的直线被墙壁挡住了,所以子弹都打在最靠近枪口的墙壁上。 当然远距离射击时就要跟着HUD的准星了;右图是现代FPS,你HUD上的准星在哪,击中范围就在哪(图中的子弹并非穿墙过去的,浅色是为了说明射击角度不科学)

还是看不懂的话直接来代表作《半条命》的截图吧。 如图所示,前两图枪口很靠近墙壁,所以子弹应该打在距离玩家最近的墙上; 然而子弹都冲着HUD的准星去了(注:这游戏没穿墙设定)

如果紧挨着墙壁,那么子弹会无视客观规律地冲着HUD的准星去。如下图,整个COD系列都有这毛病,同样在CS里一些高手也利用这个设计漏洞在拐角处蹲点

解决方案二:

方案一里面已经提到了,其实就是将发射准心与发射点设置在相机的中心前方位置处。

这里截取下csdn某位大佬的一段描述:

这里我们先说下射击,小编在对射击的处理时,命中的判定是看准心位置的,换个说法,其实命中判定是看目标是否在我角色摄像头的真中心,而不是看目标是否在我枪前面。其实这个问题是很多游戏中都有,我们射击时子弹到底应该是从枪口出还是从摄像头中心出,这个问题当我们在墙边时尤为体现的突出,有时候在角色面前有一个和抢高度等高的墙面,但是我们第一人称的视角的准心并没有被墙面挡住,那么这时要怎么处理呢?这里我们可以看看目前一些比较优秀的FPS是如何处理的,首先是彩虹六号,这个游戏很多网友都在调侃它是用瞄具在射击,只要我们能瞄到的地方就能达到,不管是否枪口被墙面堵住;再来就是绝地求生,这个游戏当我们在墙体前面时,也就是准心和枪不在同一个位置的时候,会有一个收枪的动作,所以我们在墙体前时,会出现我们能看见目标,却不能射击的情况。

举这两个例子,小编就是想说明对这个子弹出点的说明,当然出于真实,小编更倾向于后者,这个小伙伴可以根据实际情况进行调整。
---------------------
作者:RaAlGhul
来源:CSDN
原文:https://blog.csdn.net/raalghul/article/details/80223207

我们这里采用方案一,探讨一些问题的解决方案,基本玩法参考游戏为CF或者CS:

0.身体的方向:为了方便操作,身体采用添加characConller和FPSCharacter组件

1.不同的武器的持有状态:由于不同武器,肩膀的方向,手的位置,手肘的位置等不同,所以这里优先使用动画,次要使用IK调整

2.换弹过程:优先使用动画,次要使用IK

3.弯腰:IK

4.模型的枪支锚点与头部方向平行。

由于市面上提供的模型有可能不符合我的要求,为了开发第一个FPS游戏,并且减少工作量,这里,我将使用第二种方案,并且优先模型物体为角色物体的子物体,次要作为母物体,游戏尽量贴近第一个德军司令总部的模式,角色的换弹操作和换枪操作优先采用动画,次要采用IK

关于FPS游戏的设计问题的更多相关文章

  1. FPS游戏服务器设计的问题 【转】

    一.追溯 去gameloft笔试,有一个题目是说: 叫你去设计一个FPS(第一人称射击游戏),你是要用TCP呢还是要用UDP,说明理由 . 二.学习 这是两篇网上找到的文章,写非常不错. 当时笔试的时 ...

  2. (转)FPS游戏服务器设计的问题

    FPS游戏服务器设计的问题出处:http://www.byteedu.com/thread-20-1-1.html一.追溯 去gameloft笔试,有一个题目是说: 叫你去设计一个FPS(第一人称射击 ...

  3. Unreal Engine 4 系列教程 Part 10:制作简单FPS游戏

    .katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...

  4. 基于cocos2d-x的游戏框架设计——李成

    视频:http://v.youku.com/v_show/id_XMzc5ODUyMTI4.html?f=17330006 网易科技讯 3月31日,第四届CocoaChina开发者大会暨Cocos2d ...

  5. 怎样在Android开发中FPS游戏实现的两种方式比较

    怎样在Android开发中FPS游戏实现的两种方式比较 如何用Android平台开发FPS游戏,其实现过程有哪些方法,这些方法又有哪些不同的地方呢?首先让我们先了解下什么是FPS 英文名:FPS (F ...

  6. Elixir游戏服设计五

    在<Elixir游戏服设计一>里提到,按照系统功能划分成app要保证原子性很难, 现在想想也没那么难.保证原子性,无非就是需要某个单点去完成操作.那么选择玩家进程去做原子性工作就可以了. ...

  7. Elixir游戏服设计一

    在Erlang游戏服设计总结http://www.cnblogs.com/rubyist/p/5530575.html里, 我提到我想要的游戏服设计方法,希望以应用做为基础构建块.最近我在学习elix ...

  8. Erlang游戏服设计总结

    这主要是一年多来,个人从事Erlang游戏服开发中对一些事情的思考. 想到哪说到哪,没有条理可言. 欢迎讨论. 通常Erlang游戏服务的设计涉及到的东东包括如下: 任务系统 活动系统 公会系统 玩法 ...

  9. H2Engine游戏服务器设计之属性管理器

    游戏服务器设计之属性管理器 游戏中角色拥有的属性值很多,运营多年的游戏,往往会有很多个成长线,每个属性都有可能被N个成长线模块增减数值.举例当角色戴上武器时候hp+100点,卸下武器时HP-100点, ...

随机推荐

  1. 如何使用git回退部分修改(转)

    如何使用git回退部分修改(转)     很多时候,git新手容易误操作,比如,在levelIISZ-1.4.dev分支下,运行了git pull idc cpp-1.0的结果,这样做麻烦很大,经常导 ...

  2. RobotFramework常见语法

    https://blog.csdn.net/yu1014745867/article/details/79324732 常用关键字* Settings * Library Selenium2Libra ...

  3. 初学者的springmvc笔记02

    springmvc笔记 springmvc拦截器,spring类型转换,spring实现文件上传/下载 1.SpringMVC标准配置 导入jar包:core contaner 在web.xml文件中 ...

  4. Python3 获取一大段文本之间两个关键字之间的内容

    用re或者string.find.以下是re代码 123456789101112131415import re#文本所在TXT文件file = '123.txt' #关键字1,2(修改引号间的内容)w ...

  5. httpd如何卸载以及安装

    卸载 首先,要确认下是否有安装过,或者是系统自带了httpd服务,通过以下命令: # rpm -qa | grep httpd 或者: # yum list | grep httpd 我已经安装过一次 ...

  6. Mongo rs

    概念 rs中存储了每一次对mongo数据库的CUD操作,对rs的大小进行resize. 主要有两种方法: 在未开启过rs的情况下,修改配置文件 已使用rs一段时间后,发现rs太大,重新进行大小配置 启 ...

  7. [JZOJ5399]:Confess(随机化)

    题目描述 小$w$隐藏的心绪已经难以再隐藏下去了. 小$w$有$n+1$(保证$n$为偶数)个心绪,每个都包含了$[1,2n]$的一个大小为$n$的子集. 现在他要找到隐藏的任意两个心绪,使得他们的交 ...

  8. [CSP-S模拟测试]:求和(数学)

    题目传送门(内部题107) 输入格式 一行五个正整数$x_1,y_1,x_2,y_2,m$ 输出格式 输出一个整数,为所求的答案对$m$取模后的结果. 样例 样例输入: 2 1 5 3 10007 样 ...

  9. http服务配置和apache

    CentOS 6 httpd 程序环境 记录了httpd的主进程编号:    主程序文件: /usr/sbin/httpd /usr/sbin/httpd.worker /usr/sbin/http ...

  10. php 发送邮件(1)代码逻辑

    tp3.2 使用phpmailer发送短信邮箱 准备工作 1.thinkphp3.2 2.qq邮箱(开通过POP3/SMTP服务)在qq邮箱内,设置->账户->POP3/IMAP/SMTP ...