zoukankan      html  css  js  c++  java
  • 关于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

  • 相关阅读:
    Redis 集群
    应用系统日志采集解决方案
    Flume学习应用:Java写日志数据到MongoDB
    一次开发逻辑规范的总结
    JSP2 自定义标签
    mysql的left join、 right join和inner join
    静态网页、动态网页、apache和tomcat之间区别和联系
    spring与shiro配置详解
    maven项目在eclipse启动报错:java.lang.ClassNotFoundException
    如何修改maven的默认jdk版本
  • 原文地址:https://www.cnblogs.com/xiaoahui/p/10909548.html
Copyright © 2011-2022 走看看