Новости/News | | Туториалы/Tutorials | | Форум/Forum | | ЧаВо/FAQ | | Файлы/Downloads | | Ссылки/Links | | Авторы/About |

Unreal Physics 101

Содержание

Вступление

Цель этого туториала - "просветить" новичков о физике объектов в Анреаловском движке. Здесь нет практических советов, просто общая информация и объяснение - как это все работает и где применяется. Дока являет собой неплохой стартовый материал для более детального изучения физики объектов в движке.

Step 1 : Know your enumerations

Все типы физики объектов задаются перечислением EPhysics в классе Actor (для тех, кто не знаком с перечислениями, автор отправляет к доке UnrealScript Language Reference):

var(Movement) const enum EPhysics {

  PHYS_None,
  PHYS_Walking,
  PHYS_Falling,
  PHYS_Swimming,
  PHYS_Flying,
  PHYS_Rotating,
  PHYS_Projectile,
  PHYS_Rolling,
  PHYS_Interpolating,
  PHYS_MovingBrush,
  PHYS_Spider,
  PHYS_Trailer

} Physics;

Таким образом, всего у нас 12 "типов" физики объектов, хотя на деле - их всего 11 (Почему? Читайте дальше). Теперь перейдем ближе к делу.

Step 2 : PHYS_Huh?

Примечание: типы физики Falling, Swimming, Flying также часто используются для задания соответствующей анимации объекта (игрок, боты).

Step 3 : Physics in Action - Collisions

Теперь поговорим о том, как Движок определяет коллизии между объектами. Геометрия уровня по-другому называется BSP геометрией (BSP - Binary Space Partition), не вдаваясь в детали, достаточно будет сказать, что коллизии с геометрией уровня просчитываются по каждому единичному полигону (все понятно? :)). Для всего остального (для потомков класса Actor) определяется специальный Collision Cylinder. Т.е. у каждого объекта есть связанный с ним невидимый цилиндр определенных размеров, как только цилиндры двух объектов пересекаются, движок определяет что произошло столкновение этих двух объектов. Основные свойства каждого актера:

Примечание: можно увидеть collision цилиндр в редакторе UnrealED. Для этого в заголовке окна выберите Actors->Radii View, затем добавьте какой-либо актер (например, любого из ScriptedPawn), выделив его, Вы увидите тот самый цилиндр.

Также обратите внимание, collision цилиндр не вращается вместе с объектов - он всегда статичен. Это очень упрощает производимые вычисления. Теперь, когда происходит коллизия, могут вызываться следующие функции:

В вызовах функции есть несколько особенностей. Иногда движок не вызывает обе функции Touch() и Bump() если оба объекта имеют свойство bBlockPlayers=True, вызывается только Bump(), а Touch() - нет. Если у одного объекта bCollideActors=True, а у другого bBlockActors=True, то для первого объекта (с bCollidingActors) вызовется Bump(), а для второго - Touch().

Заключение

На этом все. Надеюсь, этот тутор Вам помог в изучении основ физики объектов и коллизии, так что экспериментируйте и учитесь!

Автор

Оригинальная статья: Unreal Physics 101 c сайта CHiMERiC
Автор: Pfhoenix
Mail: pfhoenix@planetunreal.com
Web: mod exemplar

Вольный перевод: Shadow
Mail: shadow_m777@mail.ru

Хостинг от uCoz