Довідник API¶
🇬🇧 English | 🇺🇦 Українська
Сторінка перелічує публічні класи InteractionSystem 1.0: що вони роблять, які мають властивості й початкові значення, де викликати функції та на якій машині спрацьовують події. Відстані — у сантиметрах, кути — у градусах, швидкості — у см/с і градусах/с.
Позначки в таблицях:
- BP — доступно в Blueprint (у дужках:
RW— читання й запис,RO— лише читання); - C++ — лише в C++;
- Сервер — функція діє лише на authority, на клієнті нічого не робить;
- Локально — подія або функція виконується лише на машині гравця, що керує pawn.
| Заголовок | Модуль | Вміст |
|---|---|---|
InteractorComponent.h |
InteractionSystem |
UInteractorComponent, делегати фокуса й результату |
InteractableInterface.h |
InteractionSystem |
IInteractableInterface |
InteractionSystemTypes.h |
InteractionSystem |
EInteractionAction, EInteractionRejectReason, FInteractionFilter, FInteractionRules |
InteractionSystemSettings.h |
InteractionSystem |
UInteractionSystemSettings — мережеві межі проєкту |
InteractionGripTypes.h |
InteractionSystem |
EInteractionHand, EInteractionReleaseReason, FInteractionGripMath |
InteractionGrabTargetComponent.h |
InteractionSystem |
UInteractionGrabTargetComponent |
InteractionBlueprintGrabTargetComponent.h |
InteractionSystem |
UInteractionBlueprintGrabTargetComponent |
InteractionClaimSubsystem.h |
InteractionSystem |
UInteractionClaimSubsystem |
InteractionGameplayTags.h |
InteractionSystem |
InteractionGameplayTags::Item, Locked |
InteractionManipulationComponent.h |
InteractionSystemWorld |
UInteractionManipulationComponent |
InteractionManipulationProfile.h |
InteractionSystemWorld |
FInteractionManipulationSettings, UInteractionManipulationProfile, переліки руху |
InteractionGripPointComponent.h |
InteractionSystemWorld |
UInteractionGripPointComponent |
InteractionDockComponent.h |
InteractionSystemWorld |
UInteractionDockComponent |
InteractionBowComponent.h |
InteractionSystemWorld |
UInteractionBowComponent |
InteractionStrikeComponent.h |
InteractionSystemWorld |
UInteractionStrikeComponent |
InteractionDestructibleComponent.h |
InteractionSystemWorld |
UInteractionDestructibleComponent |
InteractionMeshComponent.h |
InteractionSystemWorld |
UInteractionMeshComponent |
InteractionPhysicsActor.h |
InteractionSystemWorld |
AInteractionPhysicsActor |
InteractionMasterItem.h |
InteractionSystemWorld |
AInteractionMasterItem |
InteractionSpearActor.h |
InteractionSystemWorld |
AInteractionSpearActor |
InteractionPhysicsDataAsset.h |
InteractionSystemWorld |
UInteractionPhysicsDataAsset |
InteractionDebugLibrary.h |
InteractionSystemDebug |
UInteractionDebugLibrary |
InteractionCheatManagerExtension.h |
InteractionSystemDebug |
Консольні команди налагодження |
Ядро: InteractionSystem¶
UInteractorComponent¶
Scene component на pawn: шукає ціль, показує локальний фокус і надсилає дії на сервер. Один компонент — одне джерело дії: камера на desktop або одна VR-рука. Компонент реплікується; RPC ідуть через pawn, яким володіє клієнт.
| Властивість | Початково | Доступ | Призначення |
|---|---|---|---|
bUsePawnViewpoint |
true |
BP RW | Щокадру переносити компонент у точку огляду контролера. Для VR-руки вимкніть |
TraceDistance |
300 | BP RW | Довжина променя |
TraceRadius |
0 | BP RW | 0 — line trace; більше 0 — sphere sweep з перевіркою видимості контакту |
FocusUpdateHz |
30 | BP RW | Частота пошуку фокуса цього джерела |
PoseReplicationHz |
30 | BP RW | Частота спільного пакета поз (1–120); діє значення першого активного interactor pawn |
bNearInteraction |
false |
BP RW | Шукати ціль overlap-сферою навколо долоні (VR) замість променя |
NearRadius |
15 | BP RW | Радіус ближнього пошуку |
Hand |
Any |
BP RW | Сторона руки для авторських точок хвату |
PalmOffset |
Identity | BP RW | Калібрування долоні відносно компонента |
TrackingLossGrace |
0.25 с | BP RW | Скільки терпіти втрату трекінгу, перш ніж відпустити предмет без кидка |
TraceChannel |
Visibility |
BP RW | Канал пошуку й перевірки перешкод; цілі мають його блокувати |
Filter |
порожній | BP RW | Вимоги до тегів цілі, див. FInteractionFilter |
GrabOffset |
(0, 0, 0) | BP RO | Локальний зсув утримуваного предмета від джерела; для VR — нуль |
MaxOriginDistance |
500 | BP RO | Найбільша відстань повідомленої пози від pawn |
MinActionInterval |
0.08 с | BP RO | Мінімальний інтервал між діями, які приймає сервер |
PoseTimeout |
0.75 с | BP RO | Без жодного зразка пози довше за цей час сервер відпускає предмет віддаленого джерела |
MaxThrowSpeed |
2500 | BP RO | Сервер обрізає лінійну швидкість кидка |
MaxAngularSpeed |
3600 | BP RO | Сервер обрізає кутову швидкість кидка |
П'ять мережевих меж діють лише тоді, коли ввімкнено відповідний прапорець bOverrideMaxOriginDistance, bOverrideMinActionInterval, bOverridePoseTimeout, bOverrideMaxThrowSpeed чи bOverrideMaxAngularSpeed; інакше компонент бере значення з UInteractionSystemSettings.
| Функція | Доступ | Де викликати | Дія |
|---|---|---|---|
RequestGrab() |
BP | Локально | Запит захоплення поточної цілі |
RequestRelease(Linear, Angular) |
BP | Локально | Відпустити предмет; нульові вектори — без кидка |
RequestInteraction() |
BP | Локально | Звичайна дія з ціллю; якщо рука тримає предмет — його Use |
CancelGrip(Reason) |
BP | Локально або сервер | Безпечно завершити хват без кидка; Released замінюється на Cancelled |
SetTrackingValid(bValid) |
BP | Локально, щокадру | Повідомити, чи надійна поза пристрою |
RefreshFocus() / ClearFocus() |
BP | Локально | Оновити або прибрати фокус негайно |
GetFocusedActor() |
BP | Локально | Поточна ціль фокуса або None |
GetHeldActor() |
BP | Будь-де | Підтверджений сервером утримуваний актор |
CanFocusNewTarget() |
BP | Локально | Рука активна, відстежується й вільна |
IsLocallyControlled() |
BP | Будь-де | Pawn керується на цій машині |
GetGripTransform() |
BP | Будь-де | Калібрована поза долоні з одиничним масштабом |
HasRequestedGrip() |
BP | Локально | Є утримуваний предмет або запит, що очікує відповіді |
HasValidTracking() |
BP | Будь-де | Поточний стан трекінгу джерела |
GetMaxOriginDistance(), GetMinActionInterval(), GetPoseTimeout(), GetMaxThrowSpeed(), GetMaxAngularSpeed() |
BP | Будь-де | Фактична межа: перевизначення компонента або значення проєкту |
TraceTarget(Origin, Rotation, Action) |
C++ | Будь-де | Пошук цілі за тими самими правилами, що й фокус і сервер |
CancelTarget(Target, Reason) |
C++ | Сервер | Відпустити саме цю ціль, якщо рука її тримає |
| Подія | Де спрацьовує | Параметри |
|---|---|---|
OnFocusChanged |
Локально | PreviousActor, NewActor |
OnActionResult |
На клієнті, що надіслав запит, і на локальному authority | TargetActor, Action, bAccepted, Reason — причина відмови |
IInteractableInterface¶
Інтерфейс цілі для звичайної дії та локального відгуку. Реалізуйте його в Blueprint (Class Settings → Interfaces) або C++.
| Функція | Де виконується | Початкова реалізація | Відповідальність |
|---|---|---|---|
CanInteract(Interactor, Action) |
Клієнт і сервер | true |
Дозволити дію; без побічних ефектів |
GetInteractionTags() |
Клієнт і сервер | порожній контейнер | Gameplay Tags для фільтра |
Interaction(Interactor) |
Сервер | — | Ігрова дія: двері, кнопка, перемикач |
OnFocusStart(Interactor) / OnFocusEnd(Interactor) |
Локально | — | Візуальний відгук для конкретної руки |
OnGrab(Interactor) |
Сервер | — | Ядро викликає, коли ціль бере перша рука |
OnRelease(Interactor, Reason, LinearVelocity, AngularVelocity) |
Сервер | — | Ядро викликає, коли відпустила остання рука; швидкості ненульові лише для Released |
Interaction, OnFocusStart, OnFocusEnd, OnGrab і OnRelease — події, які реалізують, але не викликають з Blueprint: так клієнт не обійде сервер і реєстр захоплень. CanInteract і GetInteractionTags можна викликати.
FInteractionFilter¶
| Поле | Значення |
|---|---|
RequiredTags |
Ціль має містити всі ці Gameplay Tags (з ієрархією) |
BlockedTags |
Будь-який із цих тегів забороняє ціль |
RequiredActorTags |
Усі ці імена мають бути в Actor.Tags (точний збіг) |
Matches(Tags, ActorTags) повертає true, якщо всі вимоги виконано. Порожні списки нічого не обмежують.
FInteractionRules¶
Статичні перевірки без звернень до світу, спільні для компонента й тестів:
| Функція | Повертає true, якщо |
|---|---|
IsPoseInReach(Origin, Rotation, PawnLocation, MaxOffset) |
Значення скінченні й Origin не далі за MaxOffset від pawn |
IsFiniteVelocity(Linear, Angular) |
Обидві швидкості скінченні |
UInteractionGrabTargetComponent¶
Абстрактна межа між interactor і способом руху предмета. Готова реалізація — UInteractionManipulationComponent; реалізація з правилами в Blueprint — UInteractionBlueprintGrabTargetComponent. Власну реалізацію на C++ показано в 12.
| Член | Доступ | Призначення |
|---|---|---|
TargetTags |
BP RW | Теги для фільтра, якщо актор не реалізує інтерфейс |
CanBeginGrip(Hand) const |
C++, virtual | Чи можна почати хват; викликається і локально для фокуса, і на сервері. Початково false |
GetMaximumHands() const |
C++, virtual | Скільки рук одного pawn допускає ціль. Початково 1 |
BeginGrip(Hand) |
C++, virtual, сервер | Після резервування; false скасовує резерв. Початково false |
EndGrip(Hand, Reason, Linear, Angular) |
C++, virtual, сервер | Прибрати лише цю руку; вимушене завершення не повинно кидати предмет |
Use(Hand) |
C++, virtual, сервер | Дія руки, що тримає предмет. Початково false |
UInteractionBlueprintGrabTargetComponent¶
Ціль захоплення, правила якої задає Blueprint-нащадок цього компонента. Компонент сам перевіряє bGrabEnabled, вільне місце й те, що друга рука належить тому самому pawn, а потім питає ваші події. Рух власника виконує ваш Blueprint. Компонент реплікується.
| Член | Доступ | Призначення |
|---|---|---|
MaximumHands |
BP RO, 1–2 | Скільки рук одного pawn можуть тримати власника |
bGrabEnabled |
BP RO, реплікується | Чи приймаються нові хвати; змінюйте через SetGrabEnabled |
SetGrabEnabled(bEnabled) |
BP, сервер | Увімкнути чи вимкнути захоплення; вимкнення відпускає поточні руки з Cancelled |
CancelAllGrips() |
BP, сервер | Відпустити всі руки з Cancelled |
GetHands() / GetHandCount() |
BP, реплікується | Руки, що тримають власника, у порядку захоплення |
Подія Can Begin Grip(Hand) |
Клієнт і сервер | Додаткове правило допуску; лише реплікований стан. Початково true |
Подія Begin Grip(Hand) |
Сервер | Рука допущена й зарезервована; false скасовує хват (Unavailable). Початково true |
Подія End Grip(Hand, Reason, Linear, Angular) |
Сервер | Рука відпустила власника |
Подія Use(Hand) |
Сервер | Рука, що тримає власника, натиснула «використати»; true — оброблено. Початково false |
UInteractionSystemSettings¶
Project Settings → Plugins → Interaction System (Config/DefaultGame.ini, секція [/Script/InteractionSystem.InteractionSystemSettings]). Типові мережеві межі для всіх UInteractorComponent, якщо компонент не перевизначає значення.
| Поле | Початково | Призначення |
|---|---|---|
MaxOriginDistance |
500 см | Найбільша відстань повідомленої пози від pawn |
MinActionInterval |
0.08 с | Мінімальний час між прийнятими запитами одного джерела |
PoseTimeout |
0.75 с | Скільки чекати на будь-який зразок пози віддаленого джерела |
MaxThrowSpeed |
2500 см/с | Найбільша лінійна швидкість кидка |
MaxAngularSpeed |
3600 градусів/с | Найбільша кутова швидкість кидка |
UInteractionClaimSubsystem¶
World subsystem — серверний реєстр права на ціль. Запити доступні в Blueprint, зміни — лише в C++; на клієнті реєстр порожній.
| Функція | Призначення |
|---|---|
TryClaim(Target, Interactor, MaximumHands) |
Додати руку до хвату того самого pawn у межах ліміту (1 або 2) |
ReleaseClaim(Target, Interactor) |
Зняти лише цю руку |
FindClaimant(Target) / FindHands(Target) |
BP. Перша рука або всі руки |
IsClaimed(Target) |
BP. Є рука або пов'язаний резерв |
FindOwningPawn(Target) |
BP. Pawn-власник хвату чи резерву |
GetClaimedTargets() |
BP. Усі цілі, які тримають або резервують |
FindLinkedParent(Target) |
BP. Батьківський предмет пов'язаного резерву, наприклад лук для стріли |
ReserveLinked(Target, Parent, Pawn) |
Пов'язати залежну ціль (стрілу) з утримуваним батьком того самого pawn; цикли заборонено |
ReleaseLinked(Target, Parent) |
Зняти пов'язаний резерв |
ForgetTarget(Target) |
Забути ціль і рекурсивно її залежні резерви |
Зазвичай достатньо читати власника; змінюйте реєстр лише через RequestGrab/RequestRelease.
FInteractionGripMath¶
Детермінована математика хвату без звернень до світу: MakePairFrame будує систему координат пари долонь, Capture фіксує baseline, Solve обчислює позу для однієї чи двох рук із масштабом і pivot, PlaneAngle повертає кут точки навколо осі. Використовується маніпуляцією й тестами.
Переліки ядра¶
| Перелік | Значення |
|---|---|
EInteractionAction |
Interact — використати; Grab — взяти; Release — відпустити |
EInteractionHand |
Any — без сторони (desktop); Left; Right |
EInteractionReleaseReason |
Released — гравець відпустив (лише ця причина дозволяє кидок); TrackingLost; Cancelled; TargetInvalid; Recentered |
EInteractionRejectReason |
None — прийнято; Cooldown; InvalidTarget; InvalidPose; NotReachable; HandBusy; Claimed; Unavailable. Значення й порядок перевірок — у 13 |
InteractionGameplayTags¶
| Змінна C++ | Тег | Призначення |
|---|---|---|
InteractionGameplayTags::Item |
Interaction.Item |
Позначає предмет для RequiredTags |
InteractionGameplayTags::Locked |
Interaction.Locked |
Типовий тег для BlockedTags |
World: InteractionSystemWorld¶
UInteractionManipulationComponent¶
Готова ціль захоплення для будь-якого актора: одна чи дві руки, авторські точки, вільний хват, масштаб, фізичне утримання, обертові й лінійні ручки, зокрема для іменованої частини актора. Компонент реплікує один атомарний snapshot (руки, опора хвату, квантована поза з масштабом, відставання фізичного тіла, прикріплення, зовнішній драйвер, хід ручки), підтримує push model і на сервері вимикає ReplicateMovement власника. У спокої компонент тікає рідко й прокидається від руху.
| Властивість | Початково | Доступ | Призначення |
|---|---|---|---|
Profile |
None |
BP RW | Спільний профіль; якщо порожній — InlineSettings |
InlineSettings |
див. нижче | BP RW | Налаштування цього екземпляра |
TargetComponentName |
None |
BP RW | Ім'я компонента, яким рухати; None — корінь актора. Іменована частина залишається під своїм батьком |
bStartWithPhysics |
false |
BP RW | Симуляція на сервері з початку гри |
bGrabEnabled |
true |
BP RW, реплікується | Вимкнення відхиляє нові хвати й завершує поточні; змінюйте на сервері або через SetGrabEnabled |
RemoteInterpolationSpeed |
20 | BP RW | Згладжування snapshot на клієнтах; 0 — без згладжування |
bPredictPhysicsForOwner |
true |
BP RW | Передбачати предмет Physics у руці власника |
OwnerPredictionTolerance |
10 | BP RW | Відставання серверного тіла, після якого власник бачить серверну позу |
IdleUpdateInterval |
0.5 с | BP RW | Інтервал тіку в спокої; рух і пробудження тіла повертають щокадровий тік |
| Функція | Доступ | Де викликати | Дія |
|---|---|---|---|
GetHandCount() |
BP | Будь-де | Кількість рук, що тримають предмет |
GetPrimaryHand() / GetSecondaryHand() |
BP | Будь-де | Основна й підтримувальна руки |
GetManipulatedComponent() |
BP | Будь-де | Компонент, яким рухає маніпуляція |
ValidateSetup(OutReason) |
BP | Будь-де | Перевірити профіль і ціль; причина відмови в OutReason |
GetHandleValue() |
BP | Будь-де | Хід ручки: градуси для Rotary, сантиметри для Linear |
IsExternallyDriven() |
BP | Будь-де | Рухом керує зовнішній драйвер |
CancelAllGrips() |
BP, authority only | Сервер | Завершити всі хвати без кидка |
ResetManipulation() |
BP, authority only | Сервер | Скасувати хвати, драйвер і прикріплення; повернути вільний предмет у HomeTransform, ручку — у хід 0, іменовану частину — під її батька |
SetGrabEnabled(bEnabled) |
BP, authority only | Сервер | Дозволити чи заборонити захоплення; вимкнення відпускає поточні руки |
GetHomeTransform() / SetHomeTransform(Transform) |
BP; запис — authority only | Будь-де / сервер | Домашня поза для ResetManipulation; запам'ятовується в BeginPlay |
SyncTransform() |
BP, authority only | Сервер | Негайно надіслати клієнтам позу, змінену gameplay-кодом |
SetExternalDriver(Driver) |
BP, authority only | Сервер | Передати рух іншому актору; None повертає звичайну маніпуляцію |
SetExternalPose(Pose) |
BP, authority only | Сервер | Поза предмета під зовнішнім драйвером |
GetSettings() |
C++ | Будь-де | Ефективні налаштування (на клієнті — з snapshot) |
AttachToSurface(Parent, Socket) |
BP, authority only | Сервер | Прикріпити вільний предмет до компонента, зберігши світову позу |
SetFreeSimulation(bSimulate, Velocity, AngularVelocity) |
BP, authority only | Сервер | Для вільного предмета: зняти прикріплення й драйвер, увімкнути чи вимкнути симуляцію зі швидкостями |
IsAttached() |
BP | Будь-де | Предмет прикріплено до поверхні |
| Подія | Де спрацьовує | Параметри |
|---|---|---|
OnGripStarted |
Сервер | Hand, bFirst — true, якщо предмет до цього був вільним |
OnGripEnded |
Сервер | Hand, bLast, Reason, LinearVelocity, AngularVelocity |
OnUsed |
Сервер | Hand — рука, що тримає предмет і викликала RequestInteraction |
OnHandleChanged |
Сервер | Value, Fraction 0..1; також (0, 0) після ResetManipulation |
FInteractionManipulationSettings¶
| Поле | Початково | Призначення |
|---|---|---|
Movement |
Direct |
Direct — точна поза щокадру; Physics — серверний PhysicsHandle із колізіями |
GripSelection |
Free |
Free, Authored — лише точки хвату, PreferAuthored — точка, якщо поруч, інакше вільно |
Alignment |
KeepOffset |
KeepOffset — без стрибка; Align — сумістити точку (або корінь) з долонею |
MaximumHands |
2 | 1 або 2 руки одного pawn |
TwoHandPivot |
Primary |
Опора основної руки або Midpoint між руками |
bAllowScaling |
false |
Рівномірний масштаб двома руками (лише Direct, дві руки, без обмеження) |
MinimumScale / MaximumScale |
0.25 / 4 | Межі масштабу за найбільшою віссю |
bSimulateOnRelease |
true |
Увімкнути фізику після останньої руки |
bAllowThrow |
true |
Передати швидкості при навмисному відпусканні |
LinearStiffness / LinearDamping |
3000 / 200 | Привід позиції для Physics |
AngularStiffness / AngularDamping |
2500 / 200 | Привід обертання для Physics |
BreakDistance |
100 | На скільки тіло може відстати від бажаної пози понад своє найближче положення після захоплення; далі хват скасовується |
Constraint |
None |
Rotary або Linear (лише Direct, одна рука, без масштабу) |
ConstraintAxis |
(1, 0, 0) | Вісь у початковій системі координат цілі |
MinimumValue / MaximumValue |
0 / 720 | Межі ходу: градуси або сантиметри |
Готові нащадки змінюють частину значень: AInteractionPhysicsActor — MaximumHands=1, AInteractionMasterItem — Alignment=Align.
UInteractionManipulationProfile¶
Data Asset (Content Browser → Add → Miscellaneous → Data Asset → InteractionManipulationProfile) з одним полем Settings типу FInteractionManipulationSettings. Профіль спільний для багатьох предметів і не змінюється під час гри.
UInteractionGripPointComponent¶
| Властивість | Початково | Призначення |
|---|---|---|
Source |
Component |
Component — трансформація самої точки; Socket — socket mesh |
SocketComponentName |
None |
Компонент із socket; None — батьківський компонент точки |
SocketName |
None |
Ім'я socket |
SocketOffset |
Identity | Корекція відносно socket |
bFallbackToComponent |
false |
Дозволити трансформацію точки, якщо socket відсутній |
Radius |
20 | Максимальна відстань долоні до точки |
AllowedHand |
Any |
Обмеження сторони руки |
bAllowFirstHand / bAllowSecondHand |
true / true |
Чи може точка почати хват / додати другу руку |
Priority |
0 | Вищий пріоритет перемагає; серед рівних — найближча точка |
ResolveAnchor(OutTransform) (BP) повертає світову позу точки або false, якщо socket недоступний.
UInteractionDockComponent¶
Посадкова опора на одну деталь. Сервер кожні 0.1 с шукає поруч вільну деталь.
| Властивість | Початково | Призначення |
|---|---|---|
RequiredPartTag |
Interaction.Part |
Actor Tag, без якого деталь не сяде |
CaptureRadius |
12 | Відстань від origin деталі до опори |
AlignmentTolerance |
35° | Допустима похибка орієнтації |
Деталь сідає, якщо має UInteractionManipulationComponent, її ніхто не тримає й не резервує, вона не прикріплена й не під зовнішнім драйвером, а між нею й опорою немає перешкод на Visibility. Тоді опора вимикає симуляцію, ставить деталь у свою трансформацію (зберігаючи масштаб деталі) і прикріплює її. Повторне захоплення звільняє місце. GetOccupant() (BP) повертає деталь, TryDock(Part) (BP, сервер) пробує посадити її негайно, наприклад для початково зібраного стану.
UInteractionBowComponent¶
Лук із пов'язаною стрілою: лук тримає одна рука, стрілу — інша рука того самого pawn.
| Властивість | Початково | Призначення |
|---|---|---|
ArrowTag |
Interaction.Arrow |
Actor Tag стріли |
StringRestPoint |
None |
Компонент або точка хвату з позою тятиви; None — StringRestLocal |
StringRestLocal |
(-15, 0, 0) | Поза тятиви відносно кореня лука; вісь X спрямована до цілі |
ArrowGuideLocal |
(15, 0, 0) | Точка, через яку проходить стріла |
ArrowNockPoint |
None |
Компонент або точка хвоста стріли; None — корінь стріли |
NockRadius |
18 | Відстань хвоста до тятиви для встановлення |
MaximumDraw |
55 | Найбільший натяг |
MinimumShotFraction |
0.1 | Менший натяг повертає тятиву без пострілу |
MaximumLateralOffset |
35 | Бічне відхилення руки, що скасовує встановлення |
FullDrawSpeed |
2200 | Швидкість при повному натязі |
DrawExponent |
1 | Крива Speed = FullDrawSpeed × Draw^DrawExponent |
| Член | Доступ | Призначення |
|---|---|---|
GetDrawFraction() |
BP, реплікується | Натяг 0..1 для анімації тятиви |
GetNockedArrow() |
BP, реплікується | Встановлена стріла |
TryNock(Arrow) |
BP, сервер | Встановити утримувану сумісну стрілу |
CancelNock() |
BP, сервер | Зняти стрілу без пострілу |
OnShot |
Подія, сервер | Projectile, Velocity — після навмисного відпускання стріли |
Перед OnShot компонент сам вмикає симуляцію стріли з розрахованою швидкістю. Для AInteractionSpearActor викличте в обробнику Launch(Velocity), щоб увімкнути політ і втикання.
UInteractionStrikeComponent¶
Подія удару ребром утримуваного предмета; шкоду визначає гра.
| Властивість | Початково | Призначення |
|---|---|---|
EdgeStart / EdgeEnd |
(30, -5, 0) / (30, 5, 0) | Ребро в локальних координатах цілі маніпуляції |
EdgeRadius |
2 | Товщина sweep |
MinimumSpeed |
120 | Мінімальна швидкість точки ребра |
RequiredTargetTag |
None |
Actor Tag цілі; None — будь-яка |
OnStrike(Target, Hit, Speed) спрацьовує на сервері один раз за епізод контакту, лише коли предмет тримають і ребро рухається назустріч поверхні. Швидкість рахується за час між двома позами предмета, тому кадри без нової пози віддаленої руки її не завищують. Потрібен UInteractionManipulationComponent на тому самому акторі.
UInteractionDestructibleComponent¶
| Член | Доступ | Призначення |
|---|---|---|
Health |
Class Defaults | Запас міцності, 50 |
DamagePerImpulse |
Class Defaults | Шкода на одиницю імпульсу удару, 0.01 |
MinimumImpactDamage |
Class Defaults | Удар зараховується, якщо шкода більша за це значення (5) |
DestroyEffect |
Class Defaults | Ефект у точці руйнування: Niagara або Cascade |
GetHealth() |
BP | Залишок міцності на сервері |
ApplyImpactDamage(Amount, Location) |
BP, сервер | Завдати шкоди; при нулі — ефект і знищення власника |
OnImpactDestroyed(Location) |
Подія, сервер і всі клієнти | Перед знищенням власника: звук, уламки, власний ефект |
UInteractionMeshComponent¶
UStaticMeshComponent, у якого вимкнено реплікацію трансформації та прикріплення. Його можна зробити replicated (mesh, матеріали, видимість), не створюючи другого «письменника» руху поряд зі snapshot маніпуляції. Звичайний нереплікований static mesh теж підходить.
AInteractionPhysicsActor¶
Готовий replicated предмет: корінь MeshComponent (UInteractionMeshComponent), Manipulation і IInteractableInterface.
| Член | Доступ | Призначення |
|---|---|---|
ObjectData |
BP RO | UInteractionPhysicsDataAsset |
bInteractionEnabled |
BP RW, реплікується | Вимикає і захоплення, і звичайну дію |
bCanBeGrabbed |
BP RW, реплікується | Дозвіл на захоплення; двері й кнопки — false. Змінюйте на сервері |
InteractionTags |
BP RW | Gameplay Tags для фільтра |
OnInteracted |
Подія, сервер | Успішна звичайна дія; параметр — interactor |
IsHeld() |
BP | Предмет тримає хоча б одна рука |
OnComponentHitInternal(...) |
C++, protected virtual | Реакція на вільний удар: звук і, якщо ввімкнено, шкода, див. 05 |
OnGrab / OnRelease |
Реалізація інтерфейсу | Запам'ятати ініціатора шкоди; запустити таймер DisablePhysicsFixedTime. У нащадку викликайте батьківську реалізацію |
CanInteract дозволяє Grab, якщо bCanBeGrabbed, і Interact, якщо предмет ніхто не тримає.
AInteractionMasterItem¶
Фізичний предмет із локальною індикацією: ProximitySphere (350 см, overlap з Pawn), текстові маркери NearbyMarker («•») і FocusMarker, необов'язкові billboard NearbyIcon і FocusIcon, підсвітка mesh.
| Властивість | Початково | Призначення |
|---|---|---|
FocusOverlayMaterial |
None |
Overlay-матеріал під час фокуса |
bUseCustomDepthFocus |
true |
Писати mesh у custom depth для outline |
FocusStencil |
252 | Значення stencil для вашого post-process |
InteractionPrompt |
E |
Текст підказки фокуса |
HasLocalFocus() (BP) показує, чи фокусує предмет хоча б одна вільна локальна рука. Індикація оновлюється 10 разів на секунду й вимкнена на dedicated server.
AInteractionSpearActor¶
| Член | Початково | Призначення |
|---|---|---|
PenetrationDepth |
15 | Заглиблення вістря після влучання |
TipContactLength |
40 | Довжина передньої частини mesh, що може встромитися |
MinimumEmbedSpeed |
200 | Мінімальна швидкість для втикання |
Launch(Velocity) |
BP, сервер | Запустити політ без руки (стріла з лука) |
GetSpearTipLocation() |
BP | Світова позиція вістря (+X, Bounds.Max.X) |
IsEmbedded() |
BP | Спис устромлено в поверхню |
UInteractionPhysicsDataAsset¶
| Поле | Початково | Призначення |
|---|---|---|
MassInKg |
1 | Маса тіла |
bStartWithPhysics |
false |
Симуляція з початку гри |
PostThrowBehavior |
SleepWhenSettled |
SleepWhenSettled або DisablePhysicsFixedTime |
PhysicsDisableDelay |
5 с | Затримка для DisablePhysicsFixedTime |
bAlignToVelocity |
true |
Спис повертається вістрям за рухом |
AlignmentStiffness |
5 | Швидкість цього повороту |
HitSound |
None |
Звук удару |
HitSoundMinimumImpulse |
150 | Найменший імпульс, що відтворює звук |
HitSoundCooldown |
0.15 с | Найменший проміжок між звуками одного предмета |
bApplyImpactDamage |
false |
Завдавати шкоди акторам, у які влучає вільний предмет |
DamagePerImpulse |
0.005 | Шкода на одиницю імпульсу |
MinimumDamageImpulse |
20 | Слабші удари шкоди не завдають |
DamageTypeClass |
UDamageType |
Тип шкоди для ApplyDamage |
Переліки World¶
| Перелік | Значення |
|---|---|
EInteractionMovement |
Direct, Physics |
EInteractionGripSelection |
Free, Authored, PreferAuthored |
EInteractionGripAlignment |
KeepOffset, Align |
EInteractionTwoHandPivot |
Primary, Midpoint |
EInteractionConstraint |
None, Rotary, Linear |
EInteractionAnchorSource |
Component, Socket |
EInteractionPostThrowBehavior |
SleepWhenSettled, DisablePhysicsFixedTime |
Демо: InteractionSystemDemo¶
Класи демо — приклади використання публічного API. Їх можна переглядати й успадковувати, але не обов'язково постачати у своїй грі.
| Клас | Карта | Призначення |
|---|---|---|
AInteractionDemoCharacter, AInteractionDemoHUD, AInteractionDemoGameMode |
InteractionLab | Desktop-персонаж: E — взяти або використати, F — кинути; дії Enhanced Input створює в коді |
AInteractionDemoDoor |
InteractionLab | Двері на AInteractionPhysicsActor з bCanBeGrabbed=false |
AInteractionDemoSpear, AInteractionSpearDemoCharacter, AInteractionSpearDemoGameMode |
SpearRange | Спис із локальною індикацією та персонаж для метання |
AInteractionVRPawn, AInteractionVRHUD, AInteractionVRGameMode |
VRLab, VRLabBP | OpenXR-pawn із двома руками й desktop-емулятором |
AInteractionVRItem, AInteractionVRAxe, AInteractionVRBow, AInteractionVRArrow, AInteractionVREngine, AInteractionVRPanel |
VRLab | Предмети станцій |
AInteractionVRBunkerDoor, AInteractionVRChoppingTarget |
VRLab | Двері з колесом і поліно |
UInteractionVRPanelWidget |
VRLab, VRLabBP | Нативний віджет просторової панелі |
UInteractionVRBowVisualLibrary::StringSegmentTransform |
VRLab, VRLabBP | Поза сегмента тятиви за натягом |
AInteractionVRPawn має bForceEmulation, InputContext, IsEmulating(), RequestLabReset() і Blueprint-подію OnLabResetRequested, яку використовує VRLabBP.
Налагодження: InteractionSystemDebug¶
Листовий модуль інструментів налагодження (15). У Shipping-збірках нічого не реєструє.
| Член | Доступ | Призначення |
|---|---|---|
UInteractionDebugLibrary::ToggleInteractionDebugOverlay(PlayerController) |
BP | Відкрити або закрити панель для локального гравця |
UInteractionDebugLibrary::IsInteractionDebugOverlayOpen(PlayerController) |
BP | Чи відкрита панель |
InteractionOverlay, InteractionStatus, InteractionLog, InteractionClaims, InteractionRelease, InteractionResetAll |
Консоль | Команди менеджера читів; опис — у 15 |