Загальна інформація
опис
Клас екземпляра анімації VR Avatar є дочірнім класом екземпляра анімації . З нього можна успадкувати креслення анімації. Цей клас потрібно використовувати для анімації VR Avatar (див. Клас VR Player ) і застосовувати до компонента PlayerMesh у схемі успадкованого VR Player (Інакше він призведе до збою) .
Змінні
TDeltaTimeX – це плаваюче значення DeltaTimeX.
Гравець – це покажчик класу акторів, який вказує на володіння актором класу гравця VR
PlayerMesh – це покажчик компонента скелетної сіті, який вказує на скелетну сітку VR Player.
bIsVR – це логічна змінна, яка зараз не використовується.
HightPrecentage - це плаваюча змінна, яка зберігає зріст гравця (від 0 до 1).
MeshTransform – це змінна трансформації, яка зберігає трансформацію скелетної сітки.
FloorPosition – це змінна перетворення, яка зберігає положення підлоги з компонента зіткнення (див. VR Player) .
RightHandTransform – це змінна перетворення, яка зберігає перетворення правого контролера.
LeftHandTransform - це векторна змінна, яка зберігає перетворення лівого контролера.
RightHandStratchVector – це векторна змінна, яка зберігає вектор правого перетворення.
LeftHandStratchVector – це векторна змінна, яка зберігає вектор розтягування трансформації лівої руки.
HandTransformOffset – це змінна трансформації, яка зберігає зсув ручної трансформації відповідно до скелета (UE/SteamVR).
HeadTransform – це змінна перетворення, яка зберігає перетворення камери.
RelativeHeadLocationOffset - це векторна змінна, яка зберігає зміщення камери.
RelativeHeadRotationOffset – це змінна обертання, яка зберігає зміщення камери.
RightHandFingerCurls – це структура FFingerCurls , яка зберігає завитки правої руки.
LeftHandFingerCurls – це структура FFingerCurls , яка зберігає завитки лівої руки.
PlayerSpeed – це змінна з плаваючою речовиною, яка зберігає швидкість гравця.
PlayerDirection - це плаваюча змінна, яка зберігає напрямок гравця (від -180 до 180).
LeftFootJoint – це векторна змінна, яка зберігає суглоб лівої стопи для IK
RightFootJoint – це векторна змінна, яка зберігає суглоб правої стопи для IK
LeftHitLocation – це векторна змінна, яка зберігає розташування лівого удару для IK.
LeftAlignedRotation – це обертальна змінна для лівого краю IK.
LeftStepToGroundDistance – це плаваюча змінна, яка зберігає відстань до землі для лівої ноги.
RightHitLocation – це векторна змінна, яка зберігає місце влучення праворуч для IK.
RightAlignedRotation – це обертальна змінна для правого або IK.
RightStepToGroundDistance – це плаваюча змінна, яка зберігає відстань до землі для правої ноги.
(Інші змінні дублюються з класу VR Hand Animation Instance для кожної руки. Див. VR Hand Animation Instance)
Приклад плану анімації
Огляд алгоритму
Приклад креслення анімації руки містить 6 основних розділів: руки, таз, голова, ноги, плечі, руки .
Розділ «Руки» — у цьому розділі є 2 автомати стану для кожної роздачі (дубльовано з класу анімації VR Hand Animation ) .
Секція тазу – ця секція виконує обертання тазу відповідно до росту гравців.
Розділ голови - цей розділ виконує обертання голови.
Розділ для ніг – у цьому розділі розрізаються ноги IK.
Розділ плечей - цей розділ розтягує плечі.
Розділ рук – у цьому розділі вказується положення та обертання рук.
Постановка скелетної стопи
Для роботи скелета Аватара потрібен додатковий сокет для кроків. Розетка має бути прикріплена до тазової кістки на рівні стопи та мати назву «Legs_Z» (Ця розетка необхідна, інакше ІК стопи не працюватиме ).
Довідник API Blueprint
Публічні атрибути
float TDeltaTimeX;
AActor* Player;
USkeletalMeshComponent* PlayerMesh;
bool bIsVR;
float HightPrecentage;
FTransform MeshTransform;
FVector FloorPosition;
FTransform RightHandTransform;
FTransform LeftHandTransform;
FVector RightHandStratchVector;
FVector LeftHandStratchVector;
FTransform HandTransformOffset;
FTransform HeadTransform;
FVector RelativeHeadLocationOffset;
FRotator RelativeHeadRotationOffset;
FFingerCurls RightHandFingerCurls;
FFingerCurls LeftHandFingerCurls;
float PlayerSpeed;
float PlayerDirection;
FVector LeftFootJoint;
FVector RightFootJoint;
FVector LeftHitLocation;
FRotator LeftAlignedRotation;
float LeftStepToGroundDistance;
FVector RightHitLocation;
FRotator RightAlignedRotation;
float RightStepToGroundDistance;
FVector GetShoulderStratchVector(FVector HandTransform);
float LeftGripThumb;
float LeftGripIndex;
float LeftGripMiddle;
float LeftGripRing;
float LeftGripPinky;
float LeftIndexPushInst;
float LeftHammerPushInst;
float LeftHandOrientationZ;
bool bLeftHasWeapon;
bool bLeftA_Pressed;
bool bLeftB_Pressed;
bool bLeftTrackpad_Touch;
bool bLeftWantsToGrab;
EAnimationType LeftHandAnimType;
EPickUpAnimations LeftHandPickUpAnimation;
bool bLeftHandIsGrabbed;
UAnimSequence* LeftHandGrabAnimation;
UAnimSequence* LeftHandTriggerPressedAnimation;
UAnimSequence* LeftHandAPressedAnimation;
UAnimSequence* LeftHandBPressedAnimation;
float RightGripThumb;
float RightGripIndex;
float RightGripMiddle;
float RightGripRing;
float RightGripPinky;
float RightIndexPushInst;
float RightHammerPushInst;
float RightHandOrientationZ;
bool bRightHasWeapon;
bool bRightA_Pressed;
bool bRightB_Pressed;
bool bRightTrackpad_Touch;
bool bRightWantsToGrab;
EAnimationType RightHandAnimType;
EPickUpAnimations RightHandPickUpAnimation;
bool bRightHandIsGrabbed;
UAnimSequence* RightHandGrabAnimation;
UAnimSequence* RightHandTriggerPressedAnimation;
UAnimSequence* RightHandAPressedAnimation;
UAnimSequence* RightHandBPressedAnimation;