UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ParticleModuleLocationBoneSocket.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3
4#pragma once
5
6#include "CoreMinimal.h"
8#include "ParticleHelper.h"
10#include "ParticleModuleLocationBoneSocket.generated.h"
11
13class UParticleSystemComponent;
14class USkeletalMeshComponent;
18
19UENUM()
26
27UENUM()
34
35USTRUCT()
37{
39
40
41 UPROPERTY(EditAnywhere, Category=LocationBoneSocketInfo)
42 FName BoneSocketName;
43
45 UPROPERTY(EditAnywhere, Category=LocationBoneSocketInfo)
47
48
53
54};
55
57{
58 SourceLocations,//Module has source locations so SourceIndex is an index into these.
59 PreSelectedIndices,//Module has no source locations but requires tracking of bone velocities so SourceIndex is an index into an array of preselected indices. These indices are Direct into the bone/sockets of the source mesh.
60 Direct,//Module has no source locations and no bone tracking requirement so can simply access the mesh via direct indices to the bones/sockets.
61};
62
63UCLASS(editinlinenew, hidecategories=Object, meta=(DisplayName = "Bone/Socket Location"), MinimalAPI)
65{
67
68
74 UPROPERTY(EditAnywhere, Category=BoneSocket)
76
78 UPROPERTY(EditAnywhere, Category=BoneSocket)
79 FVector UniversalOffset;
80
82 UPROPERTY(EditAnywhere, Category=BoneSocket)
84
91 UPROPERTY(EditAnywhere, Category=BoneSocket)
93
95 UPROPERTY(EditAnywhere, Category=BoneSocket)
96 uint32 bUpdatePositionEachFrame:1;
97
99 UPROPERTY()
100 uint32 bOrientMeshEmitters:1;
101
103 UPROPERTY(EditAnywhere, Category=BoneSocket)
104 uint32 bInheritBoneVelocity:1;
105
107 UPROPERTY(EditAnywhere, Category = BoneSocket)
108 float InheritVelocityScale;
109
113 UPROPERTY(EditAnywhere, Category=BoneSocket)
114 FName SkelMeshActorParamName;
115
120 UPROPERTY(EditAnywhere, Category = BoneSocket, meta = (UIMin = "1"))
121 int32 NumPreSelectedIndices;
122
123#if WITH_EDITORONLY_DATA
125 UPROPERTY(EditAnywhere, Category=BoneSocket)
127
128#endif // WITH_EDITORONLY_DATA
129
131 EBoneSocketSourceIndexMode SourceIndexMode;
132
133 //~ Begin UParticleModule Interface
134 ENGINE_API virtual void PostLoad() override;
135 ENGINE_API virtual void Spawn(const FSpawnContext& Context) override;
136 ENGINE_API virtual void Update(const FUpdateContext& Context) override;
137 ENGINE_API virtual void FinalUpdate(const FUpdateContext& Context) override;
139 ENGINE_API virtual uint32 RequiredBytesPerInstance() override;
140 ENGINE_API virtual uint32 PrepPerInstanceBlock(FParticleEmitterInstance* Owner, void* InstData) override;
141 virtual bool TouchesMeshRotation() const override { return true; }
142 ENGINE_API virtual void AutoPopulateInstanceProperties(UParticleSystemComponent* PSysComp) override;
143 virtual bool CanTickInAnyThread() override
144 {
145 return true;
146 }
147#if WITH_EDITOR
148 ENGINE_API virtual int32 GetNumberOfCustomMenuOptions() const override;
150 ENGINE_API virtual bool PerformCustomMenuEntry(int32 InEntryIndex) override;
151 ENGINE_API virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent)override;
152#endif
153 //~ End UParticleModule Interface
154
162 ENGINE_API void GetSkeletalMeshComponentSource(const FContext& Context, FModuleLocationBoneSocketInstancePayload* InstancePayload);
163
176
177 ENGINE_API int32 GetMaxSourceIndex(FModuleLocationBoneSocketInstancePayload* Payload, USkeletalMeshComponent* SourceComponent)const;
178 ENGINE_API bool GetSocketInfoForSourceIndex(FModuleLocationBoneSocketInstancePayload* InstancePayload, USkeletalMeshComponent* SourceComponent, int32 SourceIndex, USkeletalMeshSocket*& OutSocket, FVector& OutOffset)const;
179 ENGINE_API bool GetBoneInfoForSourceIndex(FModuleLocationBoneSocketInstancePayload* InstancePayload, USkeletalMeshComponent* SourceComponent, int32 SourceIndex, FMatrix& OutBoneMatrix, FVector& OutOffset)const;
180
182 ENGINE_API int32 SelectNextSpawnIndex(FModuleLocationBoneSocketInstancePayload* InstancePayload, USkeletalMeshComponent* SourceComponent, FRandomStream& InRandomStream);
183 ENGINE_API void RegeneratePreSelectedIndices(FModuleLocationBoneSocketInstancePayload* InstancePayload, USkeletalMeshComponent* SourceComponent, FRandomStream& InRandomStream);
184
185 ENGINE_API void UpdatePrevBoneLocationsAndVelocities(FModuleLocationBoneSocketInstancePayload* InstancePayload, USkeletalMeshComponent* SourceComponent, float DeltaTime);
186
187 //If we're updating our position each frame, there's no point in inheriting bone velocity
188 inline bool InheritingBoneVelocity()const { return bInheritBoneVelocity && !bUpdatePositionEachFrame; }
189
190 ENGINE_API void SetSourceIndexMode();
191
193 static ENGINE_API void ValidateLODLevels(UParticleEmitter* Emitter, int32 iModule);
194};
195
@ ForceInit
Definition CoreMiscDefines.h:155
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::Math::TVector< float > FVector3f
Definition MathFwd.h:73
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_UCLASS_BODY(...)
Definition ObjectMacros.h:768
#define UCLASS(...)
Definition ObjectMacros.h:776
#define UENUM(...)
Definition ObjectMacros.h:749
#define USTRUCT(...)
Definition ObjectMacros.h:746
#define GENERATED_USTRUCT_BODY(...)
Definition ObjectMacros.h:767
ELocationBoneSocketSource
Definition ParticleModuleLocationBoneSocket.h:21
@ BONESOCKETSOURCE_MAX
Definition ParticleModuleLocationBoneSocket.h:24
@ BONESOCKETSOURCE_Bones
Definition ParticleModuleLocationBoneSocket.h:22
@ BONESOCKETSOURCE_Sockets
Definition ParticleModuleLocationBoneSocket.h:23
ELocationBoneSocketSelectionMethod
Definition ParticleModuleLocationBoneSocket.h:29
@ BONESOCKETSEL_Random
Definition ParticleModuleLocationBoneSocket.h:31
@ BONESOCKETSEL_MAX
Definition ParticleModuleLocationBoneSocket.h:32
@ BONESOCKETSEL_Sequential
Definition ParticleModuleLocationBoneSocket.h:30
EBoneSocketSourceIndexMode
Definition ParticleModuleLocationBoneSocket.h:57
uint32 Offset
Definition VulkanMemory.cpp:4033
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition NameTypes.h:617
Definition Array.h:670
Definition EnumAsByte.h:22
Definition ParticleHelper.h:855
Definition ParticleEmitter.h:98
Definition ParticleModuleLocationBase.h:13
Definition ParticleModuleLocationBoneSocket.h:65
Definition ParticleModuleTypeDataBase.h:18
Definition SkeletalMeshSocket.h:14
Definition ParticleModuleLocationBoneSocket.h:37
Definition ParticleModuleLocationBoneSocket.h:198
TPreallocatedArrayProxy< int32 > PreSelectedBoneSocketIndices
Definition ParticleModuleLocationBoneSocket.h:210
void InitArrayProxies(int32 FixedArraySize)
Definition ParticleModuleLocationBoneSocket.h:213
TPreallocatedArrayProxy< FVector3f > BoneSocketVelocities
Definition ParticleModuleLocationBoneSocket.h:208
TWeakObjectPtr< USkeletalMeshComponent > SourceComponent
Definition ParticleModuleLocationBoneSocket.h:200
TPreallocatedArrayProxy< FVector3f > PrevFrameBoneSocketPositions
Definition ParticleModuleLocationBoneSocket.h:206
int32 LastSelectedIndex
Definition ParticleModuleLocationBoneSocket.h:204
TWeakObjectPtr< AActor > CachedActor
Definition ParticleModuleLocationBoneSocket.h:202
Definition ParticleEmitterInstances.h:226
virtual ENGINE_API uint32 RequiredBytes()
Definition ParticleEmitterInstances.cpp:1486
virtual ENGINE_API float Spawn(float DeltaTime)
Definition ParticleEmitterInstances.cpp:1964
Definition UnrealType.h:6865
Definition RandomStream.h:20
Definition ObjectPtr.h:488
Definition WeakObjectPtrTemplates.h:25