Игровой движок Godot имеет ряд объектов, которые, казалось бы, перекрывают друг друга по функциональности, например Area2D, StaticBody2D, RigidBody2D и KinematicBody2D. И тогда в дополнение к этому вы обычно работаете с CollisionShape2D или CollisionPolygon2D. Это может сильно обернуть вашу голову.

У Годо уже есть отличное введение в эти концепции здесь. Я не буду пытаться повторять всю полезную информацию, написанную там, а вместо этого дам практическое представление о том, когда вы используете определенный вид объекта, и помогу вам вспомнить, какой из них есть какой.

Кинематическое тело и площадь

Если мы рассмотрим типичную 2D-игру-платформер, то следующие объекты, скорее всего, будут KinematicBody2D или Area2D:

  • Персонаж игрока. Герой, если хотите.
  • Враги или мобы, пытающиеся захватить игрока.

В основном это вещи, которые перемещаются с каким-то интеллектом.

Слово кинематика должно дать ключ к разгадке любому, кто хоть немного помнит школьную физику. Кинематика — это изучение движения, связанное только с ускорением, скоростью и положением. Он игнорирует силы и массу.

Вы не можете применять силы к KinematicBody2D, но он содержит методы выполнения движений в отношении столкновений. Например. вы можете выполнить скольжение по поверхности столкновения, попросить Godot проверить, вызовет ли столкновение движение по определенному вектору.

Вы можете сделать своего героя Area2D, потому что он может справляться со столкновением, но на самом деле он не представляет физическое тело. Физическое тело — это некий твердый объект с массой, который имеет положение и движется. Напротив, Area2D носит более общий характер и может просто означать область в вашей игре. Например. возможно, вы хотите, чтобы что-то изменилось или произошло, когда игроки входят в определенную область на карте. Может быть, ловушка должна быть запущена, например.

Однако, поскольку область можно перемещать вручную, ее, в принципе, можно использовать и в качестве игрового персонажа.

Статическое тело

В типичной игре StaticBody2D обозначает стены, землю и другие неподвижные объекты. Причина его существования обычно связана с производительностью. Хотя вы можете создавать стены из кинематических тел или твердых тел, это только ухудшит производительность.

Игровой движок может быстрее определять столкновения неподвижных объектов.

Area2D не совсем подходит для этой цели, потому что не представляет физического тела. Он не предназначен для решения таких задач, как отскакивание твердых тел от удара или скольжение кинематических объектов по нему.

Жесткое тело

Твердые тела – это движущиеся физические объекты. В физике их называют «жесткими», потому что они никак не деформируются. Они абсолютно жесткие. Почему мы заботимся? Физиков это волнует, потому что такие тела гораздо легче моделировать. Шаткий объект, например. было бы очень трудно вычислить движения.

В играх ракеты, пули, катящиеся шары или рушащиеся стены в играх с физикой, таких как Angry Birds, были бы твердыми телами.

Твердые тела очень гибкие, поскольку их можно переводить в различные режимы. Вы можете превратить его в статическое тело или кинематическое тело, например. при необходимости.

Почему это может быть полезно? Рассмотрим игру Angry Birds. Когда вы нацеливаете птицу на выстрел, вы, вероятно, хотите, чтобы она двигалась исключительно по коду. В этом случае вы хотите, чтобы оно вело себя как кинематическое тело.

Однако, как только птица выстрелит, все ее движения и поведение определяются только физикой, такой как сила, столкновения, масса, скорость и т. д. Таким образом, как только птица катапультируется из рогатки, вы можете изменить режим на жесткий. тело.