Уже давно игры превратились в нечто комплексное, большое и сложное, как минимум с точки зрения разработки. На плечи программистов возлагается огромная ответственность - написать идеальный код, который не будет конфликтовать с другими механиками и пройдет все изощренные испытания потребителя.
Компании имеют целые отделы тестировщиков, компетентных ребят с аутсорса и даже устраивают бета - тесты, предлагая аудитории играть в дырявый продукт и оставлять фидбек. Ну а что? Бесплатно и эффективно.
Зловещие баги зачастую всё равно прокрадываются в финальный продукт, просто требуя патчей (заплатки, как иронично). Какие баги встречаются чаще всего? В чем их причина и каково решение?
Зависимость скорости движения от FPS
Начну, пожалуй, с самого простого. Проблема встречается не так часто, но имеет место быть. Например гении из Bethesda допустили эту ошибку в бете Fallout 76 и не исправляли её вплоть до релиза.
В чем беда? Скорость движения персонажа зависит от количества кадров, которое на компьютерах может сильно отличаться. Игроки разгонялись до неестественных скоростей глядя в пол, тем самым увеличивая фпс, ведь игра перестает рендерить то, что не видно.
В основном все математические расчеты и передвижения рассчитываются каждый кадр, следовательно больше кадров = быстрее движение.
Как решить? Ух не знаю как у Bethesda дела с их древним движком, однако на современных существует волшебная переменная, рассчитываемая каждый кадр. Она равна времени, прошедшему с последнего кадра, домножив на которое, скорость передвижения будет одинаковой и на 15 кадрах, и на 60 кадрах в секунду.
Провал в текстуры
Не совсем в текстуры. Наверно многие попадали в неприятную ситуацию, проваливаясь под землю или проходя за стену и застревая там. Рассмотрю я однако более интересный пример, которые используют спидранеры, дабы выбежать за уровень и сильно сократить путь.
Проблемы? Обычно ландшафты создают одним или несколькими огромными моделями, их поверхность покрывает тоненький коллайдер и если очень постараться, на большой скорости движок может не уловить столкновение и пропустить игрока под текстуры, где он будет обречен бесконечно падать. Во имя оптимизации стены, куда нормальный игрок не полезет, тоже имеют тонкие коллайдеры, либо не имеют их вовсе.
Иногда помогает это. Идеального решения не существует, однако разным по роли объектам задается разный тип проверки столкновений. Бочке суждено падать, ткани - продолжительно взаимодействовать, а пуле - лететь на большой скорости и столкнуться с объектом. Частота проверки напрямую влияет на производительность, поэтому приравнять обычного игрока к пуле из-за спидранеров может быть плохой идеей.
Низкая производительность
Не совсем конечно баг, но достоин упоминания. Предположим игра не блещет фотореализмом и невероятными эффектами, однако поедает ресурсы как не в себя. Думаю многим это знакомо.
Проблема. Обычно виноват ужасный код. Скрипт неиспользуемой механики продолжает каждый кадр делать бесполезные расчеты, забивая процессор и оперативную память. Таких скриптов может быть много, возможно неумелый программист забывает отладить и ограничить операции, ведь и так всё работает! В анти-пример я привел MGS 5 - отличный визуал, классные механики и отличная оптимизация, позволяющая играть на слабых ПК.
Решения нет? Программисту стоит подтянуть свои навыки и чаще показывать код более опытным коллегам.