防止赛车游戏中发生过度转向的灾难


9

在Android平台上玩GTA III时,我注意到几乎在我玩过的所有赛车游戏中都有一些烦人的事情(也许除了Mario Kart以外):直行很容易,但是弯道确实很难。当我切换车道或经过某人时,汽车开始来回旋转,任何改正它的尝试只会使它变得更糟。我唯一能做的就是刹车。我认为这有点过度。

令我如此恼火的是,在现实生活中我从来没有发生过这种事情(感谢上帝:-)),因此90%的载有车辆的游戏对我来说都是虚幻的(尽管可能拥有非常好的物理引擎)。我已经与几个人讨论过这个问题,看来您要么“获得”赛车游戏,要么您没有。经过大量的练习,我确实在某些游戏中表现不佳(例如,在极品飞车系列中),它非常谨慎地驾驶,刹车很多(通常会抽筋)。

作为游戏开发人员,您如何做才能防止转向过度引起的共鸣灾难,并使驾驶感觉正确?(对于休闲赛车游戏,它并不追求100%逼真的物理效果)

我还想知道,像超级马里奥赛车这样的游戏究竟有什么不同之处,以至于它们没有太多的转向?

我想一个问题是,如果您使用键盘或触摸屏(而不是车轮和踏板)玩耍,则只有数字输入:是否踩油门,是否向左/向右转向,并且很难适当地转向给定速度。另一件事是您可能没有良好的速度感,并且比实际(安全)驾驶要快得多。从我的头顶开始,一种解决方案可能是随速度改变转向响应。


3
您还需要考虑目标受众是谁。如果是发烧友驱使游戏玩家,则只能通过“修复”现实来疏远他们。您可能没有赛车,也不了解在高速比赛中遇到的问题是很真实的事情,对真正的赛车手来说是个问题。真正的“解决办法”是使自己更随意,这就是Mario Kart所做的不同。他们对物理学的看法比较宽松,没有对创建鱼尾状模型所需的力进行建模,因此对铁杆驾驶游戏迷们不感兴趣。
DampeS8N

我不知道您有多容易使用此方法,但认为可能会有所帮助。我很久以前玩过PSX游戏,叫做Formula1。他们制作了其中的几张,但这是第一个。无论如何,这都是一个模拟,但是这些选件具有带滑杆的转向和折断辅助选件,您可以增加或减少。因此,例如,如果您的辅助刹车系统过高,转弯速度过快,您的汽车就会自动断线,并且也会为您转向(取决于您想要的辅助程度),因此您可能需要检查一下寻求解决方案。
2012年

Answers:


7

一种解决方案是作弊一点,然后猜测玩家想要做什么。当玩家处于直路段并向左按下时,您可以假定他想要切换车道。当他靠近弯道或交叉点时,他当然想转弯。玩家无法控制其在弯道中的确切转向角,因此您可以决定给玩家带来疑问的好处,并始终让他在正确的时间按转弯按钮(只要长按尽可能在身体上-任何试图以200 km / h的发夹形弯道驾驶的球员都应受到在草地上短途飞行的惩罚。

当然,如果玩家实际上想在直道上转弯或实际上想在交叉路口前切换车道,这可能会变得棘手。

另一个解决方案是在敲击键和按住键之间有区别。玩家握住转键的时间越长,转弯角度越大。这甚至没有感觉不现实,因为当您拥有方向盘时,您需要时间将其完全旋转。

编辑:在触摸屏上,您可以使用滑块而不是按钮来模拟控制转向和速度。当屏幕对压力敏感时,您也可以解释压力(但要提供最大压力的视觉反馈,否则过分热情的玩家可能会破坏其显示)。当设备具有方向传感器时,您可以使用设备倾斜来控制转向。


感谢您的纠正,@ kotekzot。但是您可以直接将编辑内容建议给其他人,而无需询问。
菲利普

你的想法很好。按下右按钮(0/1)时,它将使汽车旋转取决于弯道的角度。像开车时一样向右:说“我向左转”(0/1),但实际上您会根据坡度或多或少地转动方向盘。还有一点值得一提:角度逐渐变化,而不是突然变化。
GameAlchemist 2012年

0

在研究《侠盗猎车手IV》和《侠盗猎车手5》以外的其他游戏时,我遇到了这个(旧的)问题,但是我有一个不错的答案来实现可控的过度转向。我只对《侠盗猎车手5》中的驾驶模型有所了解,但是该信息应适用于大多数实际驾驶模型。

在大多数驾驶游戏中似乎发生的情况是,即使使用某种(时间)平滑功能,汽车转向输出也直接与玩家输入相关联。这会导致呆滞或生涩的感觉-放开控件后,汽车无法自行校正。这与真实的汽车相反,在真实的汽车中,在释放方向盘上的力后,汽车趋于居中。一些游戏试图通过更改其处理模型或使用街机处理模型来纠正此问题。

在侠盗猎车手V中可以观察到的是,用户转向输入未直接链接到转向输出。车辆自身转向其当前速度矢量。当迫使轻微的过度转向情况并观察转向轮时,这是可见的-没有任何输入,它们自己反转向。然后,在这些“自然”更正之上添加任何用户输入。

但是,这种方法的缺点是,汽车感觉太粘且有些固执,无法滑入大功率滑行或漂移中-因此此反转向值可以限制在某个角度。

可以通过重新实施转向系统并将其与原始行为进行比较来验证该理论。

  • 当直接将输入链接到输出时,即使应用了基于速度的转向输入限制器,车辆的确也确实很难控制。
  • 当添加自然反向转向时,其行为与游戏的实现几乎相同,但是汽车“过于”稳定。
  • 当将15度限制添加到反转向时,其行为几乎相同。

要记住的一点是,侠盗猎车手V在这里被视为“理想”,尽管我还没有找到其他实现该系统的游戏。

如果您对某些代码感到好奇,这是我的实现的摘要。

// Returns in radians
float Racer_calculateDesiredHeading(float steeringMax, float desiredHeading,
    float reduction) {
    desiredHeading *= reduction;
    float correction = desiredHeading;

    // Get the relative velocity vector
    Vector3 speedVector = ENTITY::GET_ENTITY_SPEED_VECTOR(vehicle, true);
    if (abs(speedVector.y) > 3.0f) {
        // Simplify it to an angle
        Vector3 target = Normalize(speedVector);
        float travelDir = atan2(target.y, target.x) - static_cast<float>(M_PI) / 2.0f;
        if (travelDir > static_cast<float>(M_PI) / 2.0f) {
            travelDir -= static_cast<float>(M_PI);
        }
        if (travelDir < -static_cast<float>(M_PI) / 2.0f) {
            travelDir += static_cast<float>(M_PI);
        }
        // Correct for reverse
        travelDir *= sgn(speedVector.y);

        // Limit to some degree, R* uses 15 degrees
        travelDir = std::clamp(travelDir, deg2rad(-15.0f), deg2rad(15.0f));

        // User input deviation
        correction = travelDir + desiredHeading;
    }

    return std::clamp(correction, -steeringMax, steeringMax);
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.