Запобігайте надмірній катастрофі в гоночних іграх


9

Під час гри в GTA III на Android я помітив щось, що мене дратує майже в кожній гоночній грі, в яку я грав (можливо, крім Маріо Карта): Проїзд прямо попереду легко, але криві справді важкі. Коли я перемикаю смуги руху або пропускаю когось, машина починає крутитися вперед і назад, і будь-яка спроба виправити це робить тільки гірше. Єдине, що я можу зробити - це вдарити гальма. Я думаю, що це якась завищеність.

Що робить це настільки дратівливим, що мені в реальному житті цього ніколи не буває (слава богу :-)), тому 90% ігор із транспортними засобами всередині мене почувають себе нереально (незважаючи на те, що у мене справді хороші фізичні двигуни). Я говорив про це з кількома людьми, і, здається, або ви 'отримуєте' гоночні ігри, або ви цього не робите. Маючи багато практики, мені вдалося отримати напівдобре в деяких іграх (наприклад, із серії Need for Speed), керуючи дуже обережно, багато гальмуючи (і зазвичай отримуючи судоми в пальцях).

Що ви можете зробити як розробник ігор, щоб запобігти надмірній резонансній катастрофі та зробити так, щоб водіння відчувало себе правильно? (Для випадкової гоночної гри, яка не прагне до 100% реальної фізики)

Мені також цікаво, які ігри на кшталт Super Mario Kart точно роблять по-різному, щоб у них не було надто великого завищення?

Я думаю, одна з проблем полягає в тому, що якщо ви граєте з клавіатурою або сенсорним екраном (але не колесами і педалями), у вас є лише цифровий вхід: натискання газу чи ні, управління вліво / вправо чи ні, і набагато важче керувати належним чином для задана швидкість. Інша справа, що ти, мабуть, не маєш хорошого відчуття швидкості, і їдеш набагато швидше, ніж ти (безпечно) насправді. Зверху в голові, одне рішення може полягати в тому, щоб змінити швидкість керування швидкості.


3
Вам також потрібно врахувати, хто ваша цільова аудиторія. Якщо він захоплений водінням геймерів, ви відчужите їх лише "виправленням" реальності. Ви, напевно, не змагаєтесь з автомобілями, і не розумієте, що на високих швидкостях гонки проблема, яку ви переживаєте, - це дуже реальна річ, яка є проблемою для справжніх водіїв гонок. Справжнє "виправлення" - бути більш випадковим, і саме це робить Маріо Карт по-різному. Вони втрачають фізику і не моделюють сили, необхідні для створення риболовних риб, і, отже, не представляють інтересу для любителів жорсткої їзди.
DampeS8N

Я не знаю, як легко у вас є доступ до цього, але думав, що це може допомогти. Я грав у гру PSX дуже давно під назвою Formula One .. вони зробили декілька з них, але це була сама перша. У будь-якому випадку це було симуляцією, але в опціях було налаштовано рульове управління та розбиття допоміжних опцій за допомогою повзунка, який можна збільшити чи зменшити. Так якби у вас була дуже висока допомога, наприклад, ваш автомобіль зламався б автоматично, якщо він рухався в повороті занадто швидко, і він керував би для вас також (залежно від того, скільки допомоги ви хотіли), тому ви можете перевірити що для вирішення.
опіку

Відповіді:


7

Одним із рішень було б трохи обдурити і здогадатися, що гравець хоче зробити. Коли гравець знаходиться на прямій ділянці і натискає наліво, ви можете припустити, що він хоче переключити смуги. Коли він знаходиться поблизу кривої чи перехрестя, він неодмінно хоче повернути. Гравець не в змозі контролювати його точний кут повороту в кривій, тому ви можете вирішити надати гравцеві користь сумніву і завжди дозволяти йому проїжджати через криві в ідеальному куті, коли він натискає кнопку повороту в потрібний момент (доки як фізично можливо - будь-який гравець, який намагається проїхати через криву шпильки зі швидкістю 200 км / год, заслуговує на те, щоб бути покараним коротким польотом над травою).

Це, звичайно, може стати складним, коли гравець насправді хоче повернути на пряму ділянку або насправді хоче переключити смуги прямо перед перехрестям.

Іншим рішенням буде мати різницю між натисканням клавіші та триманням ключа. Чим довше гравець тримає ключ, тим вище кут повороту. Це навіть не здається нереальним, тому що, коли у вас є кермо, вам потрібен час, щоб повернути його до кінця.

Редагування: На сенсорному екрані ви можете використовувати повзунки замість кнопок для керування рульовим керуванням та швидкістю аналогічним чином. Якщо екран чутливий до тиску, ви також можете інтерпретувати тиск (але надавати візуальні відгуки про максимальний тиск, або перенапружені гравці можуть порушити свої дисплеї). Якщо пристрій має датчики орієнтації, ви можете використовувати нахили пристрою для управління рульовим управлінням.


Дякую за виправлення, @kotekzot. Але ви можете пропонувати правки до публікацій інших людей безпосередньо, не вимагаючи їх.
Філіпп

ваша ідея гарна. Якщо натиснути праву кнопку (0/1), вона повертатиме автомобіль під кутом, який залежить від кривої. Право так, як коли ви їдете: ви говорите «я повертаю вліво» (0/1), але насправді ви повернете кермо більш-менш залежно від нахилу. А також щось, що варто згадати: кут поступово змінюється, не раптом.
GameAlchemist

0

Я зіткнувся з цим (старим) питанням, вивчаючи, які інші ігри, окрім Grand Theft Auto IV та V, реалізували, але я маю гідну відповідь, щоб досягти керованого режиму "oversteer". У мене є лише певний досвід возитися з моделлю водіння у Grand Theft Auto V, але ця інформація повинна бути застосовна до більшості реалістичних моделей водіння.

Що, здається, трапляється в більшості ігор на водіннях, це те, що вихід рульового автомобіля безпосередньо пов'язаний з входом гравця - навіть якщо використовується якесь (тимчасове) згладжування. Це викликає мляве відчуття або ривкове відчуття - і машина не виправляється після відпускання управління. Це на відміну від справжнього автомобіля, де машина, як правило, центрирується після вивільнення сили на колесо. Деякі ігри намагаються виправити це, змінивши модель керування або встановивши аркадні моделі обробки.

Що можна спостерігати в Grand Theft Auto V, це те, що вхід користувача в рульове управління не пов'язаний безпосередньо з виходом керма. Транспортний засіб спрямовується самостійно, у напрямку його поточного вектора швидкості. Це видно, коли змушують легку ситуацію, що перебуває в режимі "oversteer", і спостерігаючи за керованими колесами - без будь-якого вкладу вони протидіють собі. Потім будь-які дані користувача додаються поверх цих "природних" виправлень.

Недоліком цього підходу, однак, відчуття автомобіля є занадто липким і дещо впертим, щоб потрапити на падіння потужності або дрейф - тому це значення стійки може бути обмежене деяким кутом.

Цю теорію можна перевірити, повторно застосувавши рульову систему та порівнявши її з початковою поведінкою.

  • Підключаючи вхід до виходу безпосередньо, автомобіль справді надзвичайно важко керувати, навіть коли застосував обмежувач вхідного рульового механізму на основі швидкості.
  • При додаванні в природний контрстетер поведінка майже ідентична застосуванню ігор, але машини "занадто" стабільні.
  • При додаванні ліміту в 15 градусів до контрстера поведінка майже однакова.

Що потрібно пам’ятати, це те, що Grand Theft Auto 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);
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.