72 TArray<USkeletalMeshComponent *> SkeletalMeshes;
73 Character->GetComponents<USkeletalMeshComponent>(SkeletalMeshes,
false);
74 USkeletalMeshComponent *SkeletalMesh = SkeletalMeshes.IsValidIndex(0) ? SkeletalMeshes[0] :
nullptr;
75 if (!SkeletalMesh)
return;
78 auto *AnimInst = SkeletalMesh->GetAnimInstance();
79 if (!AnimInst)
return;
80 UWalkerAnim *WalkerAnim = Cast<UWalkerAnim>(AnimInst);
81 if (!WalkerAnim)
return;
84 FPoseSnapshot TempSnapshot;
85 SkeletalMesh->SnapshotPose(TempSnapshot);
90 for (
int i=0; i<TempSnapshot.BoneNames.Num(); ++i)
93 Transforms.
World = SkeletalMesh->GetSocketTransform(TempSnapshot.BoneNames[i], ERelativeTransformSpace::RTS_World);
94 Transforms.
Component = SkeletalMesh->GetSocketTransform(TempSnapshot.BoneNames[i], ERelativeTransformSpace::RTS_Actor);
95 Transforms.
Relative = SkeletalMesh->GetSocketTransform(TempSnapshot.BoneNames[i], ERelativeTransformSpace::RTS_ParentBoneSpace);
98 WalkerBones.BoneTransforms.Add(TempSnapshot.BoneNames[i].ToString(), Transforms);
107 TArray<USkeletalMeshComponent *> SkeletalMeshes;
108 Character->GetComponents<USkeletalMeshComponent>(SkeletalMeshes,
false);
109 USkeletalMeshComponent *SkeletalMesh = SkeletalMeshes.IsValidIndex(0) ? SkeletalMeshes[0] :
nullptr;
110 if (!SkeletalMesh)
return;
113 auto *AnimInst = SkeletalMesh->GetAnimInstance();
114 if (!AnimInst)
return;
115 UWalkerAnim *WalkerAnim = Cast<UWalkerAnim>(AnimInst);
116 if (!WalkerAnim)
return;
119 if (WalkerAnim->
Snap.BoneNames.Num() == 0)
122 SkeletalMesh->SnapshotPose(WalkerAnim->
Snap);
125 TMap<FName, FTransform> BonesMap;
126 for (
const TPair<FString, FTransform> &pair :
WalkerBones.BoneTransforms)
128 FName BoneName = FName(*pair.Key);
129 BonesMap.Add(BoneName, pair.Value);
133 for (
int i=0; i<WalkerAnim->
Snap.BoneNames.Num(); ++i)
135 FTransform *Trans = BonesMap.Find(WalkerAnim->
Snap.BoneNames[i]);
138 WalkerAnim->
Snap.LocalTransforms[i] = *Trans;
148 TArray<USkeletalMeshComponent *> SkeletalMeshes;
149 Character->GetComponents<USkeletalMeshComponent>(SkeletalMeshes,
false);
150 USkeletalMeshComponent *SkeletalMesh = SkeletalMeshes.IsValidIndex(0) ? SkeletalMeshes[0] :
nullptr;
151 if (!SkeletalMesh)
return;
154 auto *AnimInst = SkeletalMesh->GetAnimInstance();
155 if (!AnimInst)
return;
156 UWalkerAnim *WalkerAnim = Cast<UWalkerAnim>(AnimInst);
157 if (!WalkerAnim)
return;
160 WalkerAnim->
Blend = Blend;
168 TArray<USkeletalMeshComponent *> SkeletalMeshes;
169 Character->GetComponents<USkeletalMeshComponent>(SkeletalMeshes,
false);
170 USkeletalMeshComponent *SkeletalMesh = SkeletalMeshes.IsValidIndex(0) ? SkeletalMeshes[0] :
nullptr;
171 if (!SkeletalMesh)
return;
174 auto *AnimInst = SkeletalMesh->GetAnimInstance();
175 if (!AnimInst)
return;
176 UWalkerAnim *WalkerAnim = Cast<UWalkerAnim>(AnimInst);
177 if (!WalkerAnim)
return;
180 SkeletalMesh->SnapshotPose(WalkerAnim->
Snap);
UE_LOG(LogCarla, Log, TEXT("UActorDispatcher::Destroying actor: '%s' %x"), *Id, Actor)