Как включить адаптивную физику в Unreal 5
GHub Platform · Гайд · 0 ответов · 7 просмотров

Многопользовательская игра UE5 Контрольный список автоматического падения/пробуждения Цель Предмет находится на другом объекте. Когда он успокаивается, Хаос усыпляет его. Во время сна сервер периодически проверяет содержимое элемента. Если под ним больше ничего нет: Разбудите Rigid Body → гравитация Хаоса берет верх → предмет падает → предмет оседает → Хаос снова усыпляет его. Сервер выполняет обнаружение и физические полномочия. Клиенты получают воспроизведенную физику движения. Репликация физики по умолчанию в Unreal работает для Актеров, которые копируют движение и чей корневой компонент имитирует физику. [ ] Откройте чертеж, используемый для подвижного объекта. Например: BP_Item [ ] На панели «Компоненты» выберите статическую сетку, которая представляет физический элемент. В идеале иерархия должна быть такой: BP_Item └── StaticMesh ← ROOT Не: BP_Item └── DefaultSceneRoot └── StaticMesh Сетка, имитирующая физику, должна быть корневым компонентом для стандартной репликации физики Unreal. [ ] Если сетка в данный момент не является корнем, перетащите статик сетку на текущий корень и выберите «Создать корень», если это позволяет Blueprint. [ ] Нажмите «Параметры класса по умолчанию». [ ] Найдите на панели «Подробности»: Репликаты [ ] Включить: Репликации = True [ ] Включить: Реплицировать движение = True Это позволяет встроенной физической репликации Unreal синхронизировать авторитетного сервера моделируемого Актера. Выберите компонент Static Mesh. В разделе «Физика»: [ ] Имитировать физику = True [ ] Включить гравитацию = True [ ] Найти: Создать события пробуждения [ ] Включите это. Это позволяет Blueprint получать сигналы «При сне компонента» и «При пробуждении компонента», когда Хаос изменяет состояние сна тела. Epic документирует эти события как срабатывание, когда основной физический объект спит или просыпается. Оставьте Хаосу ответственность за принятие решения о том, когда объект физически стабилизируется. На панели «Моя схема» Blueprint: [ ] Нажмите + Переменная. Назовите его: SupportCheckTimer [ ] Измените его тип на: Timer Handle. Скомпилируйте проект. Эта переменная позволяет нам аккуратно запускать и останавливать цикл проверки поддержки. В графике событий: [ ] Щелкните правой кнопкой мыши пустое место. [ ] Добавьте пользовательское событие. [ ] Назовите его: CheckForSupport Не делайте это событие реплицируемым RPC. Он будет запущен только сервером, поэтому его не нужно реплицировать. В конечном итоге график будет выглядеть примерно так: CheckForSupport ↓ Получить границы компонента ↓ Вычислить нижнюю часть элемента ↓ Трассировка сферы по каналу ↓ Ветвь / \ Hit No Hit | | Nothing Wake Rigid Body Перетащите компонент Static Mesh с панели «Компоненты» на график. [ ] Перетащите его и найдите: Получить границы компонента. Узел предоставляет: Исходное поле Экстент Сфера Радиус Начало — это центр границ компонента. Размер рамки равен половине размера ограничивающей рамки. Нам нужна нижняя часть объекта. [ ] Щелкните правой кнопкой мыши выходные данные «Начало» и выберите: «Разделить структуру». Теперь у вас есть: Начало X Начало Y Начало Z [ ] Щелкните правой кнопкой мыши «Протяженность поля» и выберите «Разделить структуру». Теперь у вас есть: «Протяженность поля X» «Протяженность поля Y» «Протяженность поля Z» Вычислить: Нижний Z = Исходное положение Z — Размер поля Z Используйте узел: Float — Float. Соединение: Исходная точка Z -> Размер коробки Z Трассировка должна начинаться чуть выше нижней части ограничивающей рамки объекта. [ ] Создайте вектор создания. Набор: X = Исходная точка X Y = Исходная точка Y Z = Нижняя Z + 2. 2 составляет примерно 2 единицы Unreal/см. Концептуально назовите это: Trace Start. На самом деле вам не нужно создавать для этого переменную. Создайте еще один Make Vector. Используйте: X = Исходная точка X Y = Исходная точка Y Z = Нижняя Z - 10 Итак, мы смотрим только на небольшое расстояние под объектом. Концептуально: Трассировка Конец Таким образом, опорный щуп выглядит следующим образом: ПУНКТ ┌──────────┐ │ │ └──────────┘ ● ← Начало │ │ около 12 см │ ● ← Конец ──────────── ПОДДЕРЖКА Из CheckForSupport: [ ] Добавить: Sphere Trace By Channel Функция Sphere Trace By Channel в Epic просматривает сферу между началом и концом и возвращает информацию о том, встретил ли она блокирующий объект. Установите: Начало = След. Начало Конец = Конец следа. Радиус = 3. Канал трассировки = Видимость. Можно использовать, если каждая поверхность, способная поддерживать предмет, блокирует канал видимости. Для более надежной производственной настройки создайте выделенный канал трассировки, например SupportTrace, и настройте действительные поверхности поддержки, чтобы заблокировать этот канал. Trace Complex = False Ignore Self = True Draw Debug Type = None Важный вывод: Возвращаемое значение Это: True = что-то под элементом было поражено False = ничего под элементом не было поражено. Использование сферы вместо бесконечно тонкой линии делает проверку поддержки немного более щадящей. Из результатов выполнения Sphere Trace: [ ] Добавить ветвь. Соединение: Возвращаемое значение трассировки сферы → Условие ветвления Сейчас: TRUE Что-то находится под объектом. Ничего не делайте. TRUE → ничего Объект продолжает спать. ЛОЖЬ Под объектом ничего нет. Перетащите статик сетку на график. [ ] Перетащите его и найдите: Wake Rigid Body [ ] Connect: FALSE → Wake Rigid Body Epic определяет этот узел как симуляцию физики бодрствования для выбранного тела. Это тот самый момент, когда происходит волшебство. Поддержка существует ↓ Поддержка исчезает ↓ Следующая проверка поддержки ничего не находит ↓ Пробуждение твердого тела ↓ Хаос видит гравитацию ↓ Объект падает Выберите статик сетку на панели компонентов. В графике событий: [ ] Щелкните правой кнопкой мыши. [ ] Поиск: При сне компонента Выберите событие для статик-сетки. Epic документирует это событие как срабатывание, когда основной физический объект переводится в режим сна. Откуда: При переходе в спящий режим добавить: Коммутатор имеет полномочия Нам нужно, чтобы сервер выполнял только обнаружение поддержки. Подключение: при спящем режиме компонента ***СМ. ПРИМЕЧАНИЕ НИЖЕ*** ↓ Коммутатор имеет полномочия ↓ Полномочия Игнорировать удаленный выход. Epic использует тот же шаблон, чтобы гарантировать, что логика игрового процесса Blueprint, управляемая таймером, выполняется только на сервере. ** ПРИМЕЧАНИЕ ** Если элемент может появиться или загрузиться с помощью Start Awake = False , также инициализируйте его таймер проверки поддержки на стороне сервера при запуске. Не полагайтесь исключительно на режим ожидания компонента для инициализации элемента, который уже переходит в режим сна. С контакта полномочий: [ ] Добавить: Установить таймер по событию Установить: Время = 0,20 *** СМ. ПРИМЕЧАНИЕ НИЖЕ *** Цикл = True Зацикленный таймер выполняет назначенное ему событие повторно с выбранным интервалом. Из красного контакта события: [ ] Создайте/привяжите событие, которое вызывает: CheckForSupport. Сохраните возвращаемое значение из Set Timer by Event в: SupportCheckTimer. Ваша логика теперь: Включение компонента в спящем режиме ↓ Коммутатор имеет полномочия ↓ Полномочия ↓ Установить таймер по событию Time = 0,20 Цикл = True ↓ Каждые 0,20 секунды: CheckForSupport Таким образом, спящий элемент проверяет себя под собой пять раз в секунду. Он не выполняет трассировку каждого кадра. *** ПРИМЕЧАНИЕ*** 0,20 секунды — это примерное значение, а не обязательное значение. За 0,20 секунды каждый спящий элемент выполняет пять проверок в секунду. В играх, содержащих очень большое количество физических элементов, может потребоваться более длинный интервал, смещенные таймеры или система поддержки, более управляемая событиями. Теперь добавьте соответствующее событие. [ ] Выберите статик-сетку. [ ] Добавлено: при пробуждении компонента Epic предоставляет это событие специально для пробуждения физического объекта. Отсюда: При пробуждении компонента ↓ Коммутатор имеет полномочия ↓ Полномочия. Затем добавьте: Очистить и сделать неде
ИсточникGHub Platform · автор16.08.2026, 05:21:46
Многопользовательская игра UE5 Контрольный список автоматического падения/пробуждения Цель Предмет находится на другом объекте. Когда он успокаивается, Хаос усыпляет его. Во время сна сервер периодически проверяет содержимое элемента. Если под ним больше ничего нет: Разбудите Rig…
Войдите, чтобы писать в группе