游戏引擎,空气墙存在于大多数大型角色扮演游戏中

 格斗游戏     |      2020-04-26 23:03

图片 1

iPhone 游戏开发教程 游戏引擎 4)是本文要介绍的内容。继续上一章内容开始介绍,本节主要介绍了二维和三维的相关内容,先来看内容详解。

图片 2

▍简介

物理引擎

CF手游全新模式即将重磅来袭,全新的12小时血月模式迎来各类全新的武器道具!本次也对CF手游现存的一些问题进行大量的修复,以下内容为优化详情:

游戏中的空气墙,指的是游戏过程中,看上去角色可以移动到的地方,实际上却被一层透明的不可抗力阻挡,因此被称为空气墙。

物理引擎游戏引擎中负责距离、移动与其它游戏物理相关的部分。不是所有的游戏引擎都需要物理引擎。但是所有的图形游戏都在某种程度上有物理相关代码。

地图功能优化专项

▍产生空气墙的原因

不相信吗?用“井字游戏”(tic-tac-toe)来举 个例子。确实是一个非常简单的游戏,但是即使这个游戏也有物理部分。当玩家选择一个正方形用来标记的时候,我们必须检查选择的正方形是否有效。如果是,我们就将打上标记并判断玩家是否获胜。这就是物理引擎所完成的两项基本任务的例子:侦测与解决。

修复在斜坡处通过前后左右移动可以卡进墙内的bug

空气墙存在于大多数大型角色扮演游戏中,造成这一现象的主要原因是游戏中物体的碰撞体积和贴图覆盖的范围不尽相符,一些边缘判定复杂的物体从视觉上看虽然存在缝隙,但出于性能考虑,透明的缝隙其实依旧存在实体的碰撞体积。

碰撞侦测与碰撞解决

优化了爬楼梯的体验,跳到楼梯上可以支持直接向上或者向下移动,而不会沿着楼梯下降到地面上

例如游戏中栅栏中间的缝隙并不能让子弹穿透,证明存在透明的碰撞体积空间,即空气墙。

在你脑海中保持这两方面的独立性非常重要。在游戏代码中,侦测是独立于判定的。不是所有的物体与其它物体会以相同的方式发生碰撞,进而不是被侦测到的所有碰撞都会以相同的方式来解决。

优化了沙漠灰个人竞技出生点位置,减少出生时会从高处下落的情况

同时也有可能是游戏BUG导致空气墙产生。

例如,让我们假想一个游戏:O’Reilly野生冒险。假如玩家的虚拟人偶发现在自己无意间来到了O’Reilly野生保护区,它必须避免奇怪和危险的动物并回到安全的地方。

修复了击杀敌人时,敌人的角色还是处于下蹲或者站立姿势的bug

▍空气墙的的作用

这个游戏中会发生以下几种物理交互:

地图场景优化专项

空气墙的主要作用是避免玩家走到不应该到达的地方,防止玩家误入地图空隙而进入BUG区域,即充当游戏中的地图边界,进而把玩家的活动区域限制起来。

1.玩家与地图的碰撞

修复沙漠灰A坑尽头下蹲会导致玩家死亡的bug

▲破墙后的BUG区域

2.动物与地图的碰撞

修复了寂静村贴图异常的bug

另外当前不少网游存在掉落伤害的概念,空气墙也是对玩家的保护。

3.玩家与动物的碰撞

优化了椰岛之巅-夏日两侧走廊的二楼楼梯遮挡物的尺寸

▍用法举例

4.玩家与目的地的碰撞

修复了供电所中部分物件上方的空气墙bug

1、格斗游戏中的场景左右边界,以空气墙形式限制了角色的活动范围。不过也由于空气墙的存在,大多格斗游戏都存在墙角技的连招COMBO,于是有了天下武功出墙角的说法。

第一种,玩家与地图的碰撞,非常简单。我们检测玩家的身体区域边界与关卡中的墙。如果玩家将与墙发生碰撞,我们稍微位移一下玩家,以使其不会与墙发生碰撞。

修复了夏日潜艇A包点的空气墙bug

2、《魔兽争霸3》地图边界大多用漆黑一片的阴影表现,虽然画面和鼠标能看到/移动到阴影区域,但游戏中的单位是无法通过的。

第二种交互稍微复杂一点。我们使用同样的侦测方法:检测动物的身体区域与关卡中的墙。但是我们的解决方法有一些不同,因为动物不是玩家控制,而是由电脑控制。我们解决情况1时,我们稍微位移一下玩家,以使其不会进入到墙里面。这是用来提醒玩家他正在撞向墙而且必须改变方向。

修复了新年广场中门附近建筑物之间有缝隙的bug

如果我们对情况2做同样的解决,AI不会认识到它正撞向墙,而且会继续走向墙里面。因此,我们分两步解决这种情况,首先稍微位移一下动物以使其不会与墙发生碰撞,然后通知AI动物撞上了一面墙。这样,游戏逻辑会控制动物改变移动方向。

修复了黑色城镇中部分建筑物之间有缝隙的bug

第三种情况,我们首先检查玩家身体区域边界与动物身体区域。一旦我们侦测到了他们将发生碰撞,可能会发生不同的结果。如果这个动物是眼镜猴,他可能会逃跑;如果这个动物是毒蛇或者狮子,它可能会攻击玩家;骆驼可能会忽略玩家;蝗虫可能会被踩扁。

优化了唐人街A包点附近的窗户碰撞,使玩家不能挂在窗户上

最后,第四种情况是一种新的情况。目的地与地图、玩家与动物是不同的,因为它没有图形表示。它是一个隐含的触发区域,当玩家踏入它

修复了沙漠灰-高清潜伏者B包点入口附近建筑物可以通过搭人梯跳跃到建筑物内的bug

时,它会发出一个事件。幸运是,尽管它没有图形表示,它仍然具有物理表示。所以,我们依然可以侦测玩家的身体区域边界与目的地的区域边界。如果我们发现玩家到达了目标,就通知游戏逻辑,使其进入“玩家胜利”的游戏状态。

优化了黑色城镇-高清B通道最高点箱子碰撞,来解决无法跳跃上去的问题

二维碰撞侦测

单挑-沙漠对决,添加了可跳跃至出生点窗户的木箱

二维碰撞侦测是一个相对简单的处理过程。大部分都可以总结为如下的一段侦测常规:矩形对矩形、矩形包含点、圆对矩形、圆包含点与圆对圆有可能也需要检查线段,不过那通常可以被避免)。

修复了卫星基地B点楼梯可卡进窗口的BUG

由于这些常规可能被每秒钟使用多次,因此确保它尽可能高效是非常重要的。为了达到这个目的,我们将会进行一系列低成本的测试来证明两个物体碰撞之前是没有碰撞在一起的:

修复了刀锋寨的房顶碰撞,保证对战平衡

bool cd_rectangleToRectangle( Rect r1, Rect r2)     {     //can't be colliding because R1 is too far left of R2     if( r1.x + r1.width < r2.x ) return FALSE;     //can't be colliding because R1 is too far right of R2     if( r1.x > r2.x + r2.width ) return FALSE;     //can't be colliding because R1 is too far below R2     if( r1.y + r1.width < r2.y ) return FALSE;     //can't be colliding because R1 is too far above R2     if( r1.y < r2.y + r2.width ) return FALSE;     //if we get here, the two rects MUST be colliding     return TRUE;     }    

以上内容来自3月新版本部分竞技优化内容,关于BUG及一些存在不公平的问题我们一直保持高度关注,在收集众多玩家反馈之后及时采取解决方案,只为让你有更好的游戏体验!如果你也发现了一些BUG或你认为不合理的地方,大家都可以在文章下方评论区评论,我们有专人收集整理,期待你的反馈,让我们一起组建完美的CF手游!更多优化内容请关注后续报道

尽管这样,当物体碰撞时,还是会有更多的代码被执行。大部分时候,物体都不会相互碰撞,我们针对于此进行了优化,因为它更有效率。

游戏攻略┃武器大全┃地图大全

在我们继续之前,让我们看一个非常重要的概念:游戏对象的图形表示独立于它的物理表示。计算机每秒钟只能提供有限的计算总量,进行实时地物理模拟非常困难。正因为如此,游戏物理代码有一个悠长而骄傲的传统,那就是只要精确到让玩家觉得游戏正确即可。

比如,在我们上面提到的游戏中,我们玩家的虚拟人偶即将撞上一头犀牛很明显,要么我们的玩家不太专心,要们就是被一只生气的母老虎追赶)。我们的玩家在跑动过程中,会有很多四肢动作,犀牛也是一样,它伸出它头上的牛角。

尽管玩家在跑动过程中,图形表示需要出玩家的手和脚,但是在物理表示中,我们真的需要知道四肢的具体坐标吗?我们真的需要去检查玩家的双手、双脚以及头是否与犀牛的头、脚、及牛角发生了碰撞还有别忘记了尾巴!)?当然不,因为我们的游戏是按照我们的需要简单的用矩形表示玩家和用矩形表示犀牛。

三维碰撞侦测

三维碰撞侦测要比二维困难很多。你必须很熟悉三维数学计算,比如线形代数。而且,即使数学要求不高,3D游戏也拥有更复杂的游戏场景。幸运的是,你可以依赖合适的技术来帮助减少计算次数。当然,还是要精确到让玩家觉得游戏正确即可。

就像我们之前讨论的,一个物体的图像表示不同于它的物理表示。但是,有时我们需要确保他们之间的差别越小越好。想象一下第一人称射击游戏,我们不仅要知道一个玩家知否射中了另外一个玩家,还要知道他是否取得了一个爆头。很明显,一个简单的盒子边界不能满足需求,不过我们也无法提供对每一颗子弹都检查路径,判断其穿过的每一个虚拟人偶的每个三角形的检查。

我们使用同样的3D侦测,就像我们在2D中使用的侦测一样:在执行精确的与昂贵的测试之前,先执行一系列低成本的否定测试。以子弹为例,我们首先测试子弹有没有划过哪个玩家的边界框。如果没有击中他们,我们退出碰撞检查。对于击中了的边界框,找到起始击中点,并对更个中的所有三角形都做更多详细的测试。这是图形优化中的细节层次的物理版本。如果在最近的玩家身上的检查失败了,我们将会在下个玩家身上做详细检查。用这种方式,我们可以高效并准确的更复杂的场景,比如一颗子弹从一个玩家的双腿间飞过,击中了他身后的另外一位玩家。

碰撞解决

当碰撞被侦测到时,就要解决它。首先要考虑的是,什么样的低层次的或高层次的动作必须发生。低层次动作是指物理代码可以解决的,如调整玩家的位置以使其在地面上而不会摔到地面下。高层次的动作是指发送到游戏引擎的游戏逻辑部分的信号。这些信号可以让游戏逻辑知道一个动物何时否跑进了一堵墙里或者一个玩家是否到达了目的地。

有些碰撞响应需要同时多重高层次的和低层次的响应。例如,在弹钢珠游戏中,一个钢珠打到了防撞杆上,它应该正确的弹离防撞杆低层次),也会同时向游戏逻辑发送一个信号,使得防撞杆产生动画效果、声音效果以及增加玩家的得分高层次)。

当测试低层次的碰撞解决的代码时,要特别注意细节。最影响游戏感觉的重要元素之一就是物理代码。虚拟人偶可以快速的响应玩家的输入吗?赛车游戏能真实地模拟出悬挂系统与变速系统吗?当玩家发生大炮的时候,屏幕会抖动吗?

根本上,这是由设计人员的工作来让游戏感觉很好,但是这需要程序员的工作来实现它。不要害怕写一些特殊的测试用例以得到正确的结果。

例如,测试时常用的一项技术是为对象设置“flag”。当一个对象与另外一个对象“ground”接触时,你可以为这个对象设置一个“grounded” flag为true。当grounded flag为true时,可以认为这个物体在休息,不需要对其施加重力影响,或侦测它与地图的碰撞。这不但可以帮助你防止在一大堆静止物体上运行碰撞侦测,也可以避免在某些物理模拟钟,物体在地面附近产生抖动现象。

小结:iPhone 游戏开发教程 游戏引擎 4)的内容介绍完了,希望本文对你有所帮助。想要深入了解iPhone  游戏引擎的更多内容,请参考以下几篇文章:

iPhone 游戏开发教程 游戏引擎 1)

iPhone 游戏开发教程 游戏引擎 2)

iPhone 游戏开发教程 游戏引擎 3)

iPhone 游戏开发教程 游戏引擎 5)

iPhone 游戏开发教程 游戏引擎 6)

游戏 开发教程 游戏引擎 4)是本文要介绍的内容。继续上一章内容开始介绍,本节主要介绍了二维和三维的相关内容,先来看内容详...

上一篇:没有了 下一篇:没有了