关于FPS游戏的设计问题
第一个想到的问题:
首先以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游戏的设计问题的更多相关文章
- FPS游戏服务器设计的问题 【转】
一.追溯 去gameloft笔试,有一个题目是说: 叫你去设计一个FPS(第一人称射击游戏),你是要用TCP呢还是要用UDP,说明理由 . 二.学习 这是两篇网上找到的文章,写非常不错. 当时笔试的时 ...
- (转)FPS游戏服务器设计的问题
FPS游戏服务器设计的问题出处:http://www.byteedu.com/thread-20-1-1.html一.追溯 去gameloft笔试,有一个题目是说: 叫你去设计一个FPS(第一人称射击 ...
- Unreal Engine 4 系列教程 Part 10:制作简单FPS游戏
.katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...
- 基于cocos2d-x的游戏框架设计——李成
视频:http://v.youku.com/v_show/id_XMzc5ODUyMTI4.html?f=17330006 网易科技讯 3月31日,第四届CocoaChina开发者大会暨Cocos2d ...
- 怎样在Android开发中FPS游戏实现的两种方式比较
怎样在Android开发中FPS游戏实现的两种方式比较 如何用Android平台开发FPS游戏,其实现过程有哪些方法,这些方法又有哪些不同的地方呢?首先让我们先了解下什么是FPS 英文名:FPS (F ...
- Elixir游戏服设计五
在<Elixir游戏服设计一>里提到,按照系统功能划分成app要保证原子性很难, 现在想想也没那么难.保证原子性,无非就是需要某个单点去完成操作.那么选择玩家进程去做原子性工作就可以了. ...
- Elixir游戏服设计一
在Erlang游戏服设计总结http://www.cnblogs.com/rubyist/p/5530575.html里, 我提到我想要的游戏服设计方法,希望以应用做为基础构建块.最近我在学习elix ...
- Erlang游戏服设计总结
这主要是一年多来,个人从事Erlang游戏服开发中对一些事情的思考. 想到哪说到哪,没有条理可言. 欢迎讨论. 通常Erlang游戏服务的设计涉及到的东东包括如下: 任务系统 活动系统 公会系统 玩法 ...
- H2Engine游戏服务器设计之属性管理器
游戏服务器设计之属性管理器 游戏中角色拥有的属性值很多,运营多年的游戏,往往会有很多个成长线,每个属性都有可能被N个成长线模块增减数值.举例当角色戴上武器时候hp+100点,卸下武器时HP-100点, ...
随机推荐
- VCL界面开发必备装备!DevExpress VCL v19.1.5你值得拥有
DevExpress VCL Controls是 Devexpress公司旗下最老牌的用户界面套包.所包含的控件有:数据录入,图表,数据分析,导航,布局,网格,日程管理,样式,打印和工作流等,让您快速 ...
- SpringMVC优雅的获取HttpSevletRequest及HttpServletResponse简录
https://cloud.tencent.com/developer/article/1403947 通常情况下,SpringMVC可以通过入参的方式绑定HttpServletRequest和Htt ...
- jar is not a valid DFS filename
- 将Excel数据读入DataGridView
OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "Microsoft Excel ...
- Junit 4测试框架使用
断言是编写测试用例的核心实现方式,即期望值是多少,测试的结果是多少,以此来判断测试是否通过. 断言核心方法 assertArrayEquals(expecteds, actuals) 查看两个数组是否 ...
- 20.包含min函数的栈(python)
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). # -*- coding:utf-8 -*- class Solution: def ...
- maven项目创建5 service层整合
创建service相关文件 创建applicationContext-service.xml文件 <?xml version="1.0" encoding="UTF ...
- jQuery_完成表单注册检验
在校验表单的时候会很麻烦,但是jq可以用很简单的方法来检验,即使用validate. 原表单: 代码 <!DOCTYPE html> <html> <head> & ...
- Android 造炫目的圆形菜单 秒秒钟高仿建行圆形菜单
1.概述 今天打开建行看存款,一看伤心欲绝,再看:我擦,这个圆形菜单挺炫.于是,为了掩盖我悲痛的心情,我决定是实现这个效果.好了,其实还有个原因,记得我初学android那会我做的应用被鄙视了,说我的 ...
- getFieldDecorator用法(一)——登录表单
之前使用antd的ui表单,却没发现这么好用的用法,推荐给大家 import React from "react"; import { Card, Form, Input, But ...