Baseline: OverAnim 0.1.0 Beta · Unreal Engine 5.8
Header: OverAnimation/Asset/OverAnimMeshDeformer.h
UOverAnimMeshDeformer is a per-Skeleton OverAnim authoring asset. It stores Regions, Module Stacks, Response Rules, and motion, simulation, and protocol settings, and is installed at runtime by UOverAnimComponent.
Properties
| Details UI Name |
C++ Property |
Default · Range |
Effect · Relationship |
Target Skeleton |
TargetSkeleton |
None |
Must match the target Skeletal Mesh's Skeleton. A mismatch fails contract validation and installation. |
Applied Animations |
AppliedAnimations |
Empty array |
If empty, all Animations are allowed. Otherwise, a full-length Activation Window is injected only into the specified Animations. |
Scope Activation Channel |
ScopeActivationChannel |
None |
Optional channel delivered by the Window created by AppliedAnimations. It connects only to a Rule's Notify Activation Channel filter. |
Master Effect Intensity |
MasterEffectIntensity |
1.0, 0+ · UI maximum 3 |
Multiplied into the authored strength of every Module in the asset. Per-module safety limits remain in effect. |
| C++ legacy tuning source |
TuningSource |
Detailed |
Serialized field retained for compatibility with existing assets. Current built-in module runtime does not read it, and it does not control the Simple / Details layout or whether Simple knobs are applied. It is not exposed directly in Details/Blueprint. |
Simulation Settings |
SimulationSettings |
Structure defaults |
Controls fixed updates, substeps, and discontinuity/history resets. See Motion · Simulation. |
Motion Signal Settings |
MotionSignalSettings |
Structure defaults |
Analysis and Signal settings for Automatic Six-Stage Motion. See Motion · Simulation. |
Proportion Calibration |
ProportionCalibration |
Automatic calibration enabled |
Calibrates linear distance, speed, and acceleration thresholds for character/Region size. See Region · Calibration. |
Signal Protocol Settings |
SignalProtocolSettings |
Structure defaults |
Converts Protocol Channels into actual FName Signals. See Signal · Impact Types. |
Impact Signal Settings |
ImpactSignalSettings |
Structure defaults |
Magnitude, deduplication, and contact-processing rules for Hit, Collision, and Damage requests. |
Overlapping Region Policy |
RegionCompositionPolicy |
AdditiveClamped |
Composes deformations from Regions with overlapping vertex masks using Additive Delta or Strongest Delta. |
Request Budget |
RequestBudget |
256 / 64 / 32 / 1/60 s / 2 s |
Per-frame limits for Signals/Requests and active response slots. Excess requests may not be processed. |
Bone Group Descs |
BoneGroupDescs |
Empty array |
Authoring data documented in Bone Group · Region. |
Response Sets |
ResponseSets |
Empty array |
Named sets selected by Rules. See Response Types. |
Response Rules |
ResponseRules |
Empty array |
Routes Signals to specific Region/Module Responses. |
Blueprint / Call In Editor Authoring
| Blueprint Display Name |
C++ Declaration |
Inputs · Return |
Preconditions · Failure/State Change |
| Add or Update Automatic Six-Stage Response |
int32 AddOrUpdateAutomaticMotionPhaseRule(FName BoneGroupName, FName ModuleName) |
Accepts a Region name and Module name and returns a Rule index. |
The Group, Module, and Region Motion Phase Signal name must be valid, and the Module must support automatic responses. Returns INDEX_NONE on failure. On success, enables motion/Region/phase Signals and sets activation scope to AuthoredActionWindow. An existing Rule preserves authored stage settings; a new Rule creates the module's default response parameters and an automatic Response Set. |
Public C++ Functions
These are not Blueprint nodes. They form the supported boundary for asset-authoring tools and C++ integrations.
Validation · Animation Scope · Skeleton
| C++ Declaration |
Return · State Change |
Preconditions · Rejection Conditions |
bool HasAppliedAnimations() const |
Returns true when AppliedAnimations contains at least one entry and false when empty. Queries whether the asset specifies an Animation Scope. |
Does not check whether array entries can be loaded or whether target Animation Skeletons match. Scope-notify injection synchronously loads each entry and skips entries that cannot be loaded. |
bool SetTargetSkeleton(USkeleton* InTargetSkeleton) |
Sets the Skeleton and broadcasts the change delegate. |
InTargetSkeleton must be valid; otherwise returns false. |
bool ValidateContract(const USkeletalMesh* SkeletalMesh, TArray<FText>& OutErrors, TArray<FText>& OutWarnings) const |
Populates OutErrors and OutWarnings; returns true when no errors exist. |
Compares the Mesh/Skeleton, unique IDs and names, mask ranges, Rule routes, module support, and budget. A false return means the contract is not installable. |
FOverAnimAssetChanged& GetAssetChangedDelegate() |
Returns the asset-change multicast delegate. |
Native C++ delegate accepting the three FOverAnimAssetChanged arguments below. It is not a Blueprint Event. |
void NotifyAssetChanged(EOverAnimAssetChangeType ChangeType, UObject* ChangedObject) |
Broadcasts AssetChangedDelegate as (this, ChangeType, ChangedObject). |
Reports an authoring-change category; it is not an API for controlling rendering or the instance lifecycle. |
Asset Change Delegate
FOverAnimAssetChanged is a native multicast delegate with three arguments: UOverAnimMeshDeformer*, EOverAnimAssetChangeType, and UObject*. It has no return value and is not exposed to Blueprint. Subscribing C++ code must remove any delegate handle it retains before its own lifetime ends.
| Broadcast Argument |
Type |
Contract |
Asset |
UOverAnimMeshDeformer* |
Asset reporting the change. It is the same asset that returned GetAssetChangedDelegate(). |
ChangeType |
EOverAnimAssetChangeType |
Change category in the table below. Subscribers can use it to choose the scope of cache or display refreshes. |
ChangedObject |
UObject* |
Direct target of the change. The asset itself or its Module may be supplied; the delegate does not transfer ownership. |
EOverAnimAssetChangeType Value |
Meaning |
Current Built-In Authoring Path |
Parameters |
Members are unchanged, but values such as names, mask policy, LOD policy, view stylization, or module parameters changed. |
Parameter setters and ordinary module Details changes broadcast this category. |
Structure |
Installation or composition structure changed, such as the Target Skeleton or Bone Group/Module addition, removal, order, or activation. |
Skeleton assignment, Group/Module structural editing, Undo, and structural module-property changes broadcast this category. |
PreviewOnly |
Public enum value for distinguishing preview-only changes. |
Built-in authoring paths in OverAnim 0.1.0 Beta do not call NotifyAssetChanged() with this value. External integrations may provide it. |
Bone Group Authoring
| C++ Declaration |
Return · State Change |
Preconditions · Rejection Conditions |
FGuid AddBoneGroup() |
Returns the new Group's ID. |
A successful ID is appended to BoneGroupDescs. |
bool RemoveBoneGroup(FGuid GroupId) |
Removes the Group. |
Returns false if no matching ID exists. Rules referencing the Group must be validated separately. |
FGuid DuplicateBoneGroup(FGuid GroupId) |
Returns the duplicate Group ID. |
Returns an invalid GUID if the source ID does not exist. Module/Region data is duplicated. |
bool MoveBoneGroup(FGuid GroupId, int32 TargetIndex) |
Changes array order. |
Returns false if the ID or target index is invalid. |
bool SetBoneGroupName(FGuid GroupId, FName NewName) |
Changes GroupName. |
Returns false for an empty name or a name duplicated by another Group. Rule BoneGroupName values are not replaced automatically. |
bool SetBoneGroupAlwaysEnabled(FGuid GroupId, bool bIsAlwaysEnable) |
Changes Always Active. |
Returns false if the target ID does not exist. |
bool SetBoneGroupAffectedBone(FGuid GroupId, FName BoneName, bool bAffected) |
Adds or removes one bone from the mask. |
The Group and bone must be valid. |
bool SetBoneGroupAffectedBones(FGuid GroupId, TConstArrayView<FName> BoneNames, bool bAffected) |
Changes mask state for multiple bones. |
The Group ID and every bone name must be valid. |
bool SetBoneGroupHierarchyExpansion(FGuid GroupId, int32 ExpandTowardsRoot, int32 ExpandTowardsLeaf) |
Changes root/leaf expansion. |
Root must be 0+; leaf must be -1 or 0+. |
bool SetBoneGroupMotionSampleBone(FGuid GroupId, FName MotionSampleBone) |
Changes Fixed Analysis Bone. |
Returns false if the Group ID does not exist. None selects automatic resolution using Analysis Method. |
bool SetBoneGroupAutomaticActionGroup(FGuid GroupId, FName AutomaticActionGroup) |
Changes Action Group. |
Returns false if the Group ID does not exist or the value is unchanged. None denotes an independent Region. |
bool SetBoneGroupAutomaticActionMotionAnalysis(FGuid GroupId, OverAnimMotionPhase::EMotionAnalysis MotionAnalysis) |
Changes Analysis Method. |
Returns false if the Group ID does not exist or the value is unchanged. The function does not separately sanitize the enum value. |
bool SetBoneGroupAutomaticPhaseAnimationRouting(FGuid GroupId, OverAnimMotionPhase::EAnimationRouting AnimationRouting) |
Changes the Analyze Animations route. |
Returns false if the Group ID does not exist or the value is unchanged. Saved Allowed Animations are retained and may be ignored with a validation warning on other routes. |
bool SetBoneGroupAutomaticPhaseAnimations(FGuid GroupId, TConstArrayView<TSoftObjectPtr<UAnimSequenceBase>> Animations) |
Replaces Allowed Animations. |
Returns false if the Group ID does not exist. Stores a sanitized array with null entries, entries absent from AppliedAnimations, and duplicate paths removed; also returns false if the sanitized result equals the current value. |
bool SetBoneGroupAuthoredMotionPhaseCurves(FGuid GroupId, FName CurveName, FName CurveWeightName) |
Sets the Stage Curve and companion weight curve together. |
Returns false if the Group ID does not exist or both values are unchanged. The function can store a weight-only combination, so validate afterward. A weight curve alone is a contract error. |
bool SetBoneGroupMaskPolicy(FGuid GroupId, const FOverAnimRegionMaskPolicy& MaskPolicy) |
Changes mask falloff. |
Requires ZeroWeight < FullWeight. |
bool SetBoneGroupLodPolicy(FGuid GroupId, EOverAnimRegionLodPolicy LodPolicy) |
Changes the LOD contract. |
Returns false if the Group ID does not exist. |
bool SetBoneGroupViewStylization(FGuid GroupId, const FOverAnimRegionViewStylizationSettings& ViewStylization) |
Changes Region Camera Readability permission/strength. |
Actual correction also requires the Component's Camera Readability master switch to be enabled. |
Module Stack Authoring
| C++ Declaration |
Return · State Change |
Preconditions · Rejection Conditions |
FGuid AddModule(FGuid GroupId, TSubclassOf<UOverAnimDeformerModule> ModuleClass) |
Returns the created Module ID. |
The Group and ModuleClass must be valid. Returns an invalid GUID on failure. |
bool RemoveModule(FGuid GroupId, FGuid ModuleId) |
Removes the Module. |
Returns false if the Group/Module ID does not exist. Rules referencing the Module must be updated separately. |
int32 RemoveMissingModuleEntries(FGuid GroupId) |
Returns the number of missing-class entries removed. |
Returns 0 if the Group ID does not exist. |
FGuid DuplicateModule(FGuid GroupId, FGuid ModuleId) |
Returns the duplicate Module ID. |
Returns an invalid GUID if the target ID does not exist. |
bool MoveModule(FGuid GroupId, FGuid ModuleId, int32 TargetIndex) |
Changes Module Stack order. |
Returns false if the target ID/index is invalid. Order within the same Phase affects the composition result. |
bool SetModuleEnabled(FGuid GroupId, FGuid ModuleId, bool bEnabled) |
Changes the Module's enabled state. |
Returns false if the target ID does not exist. |
bool RenameModule(FGuid GroupId, FGuid ModuleId, FName NewName) |
Changes Module Name. |
Requires a valid target and unique name. It must match the Rule's ModuleName route. |
bool ResetModuleParameters(FGuid GroupId, FGuid ModuleId) |
Restores exposed parameters to class defaults. |
Returns false if the target ID does not exist. Module Id remains as the identifier. |
Lookup Queries
| C++ Declaration |
Return · State Change |
Preconditions · Rejection Conditions |
int32 FindBoneGroupIndex(FGuid GroupId) const |
Returns the array index of the first entry in BoneGroupDescs whose GroupId matches. Does not modify the asset. |
Returns INDEX_NONE when no ID matches. An invalid GUID also returns the same value if it has no matching entry. |
int32 FindModuleIndex(const FOverAnimBoneGroupDesc& BoneGroupDesc, FGuid ModuleId) const |
Returns the array index of the first non-null Module in BoneGroupDesc.Modules whose ModuleId matches. Does not modify the asset. |
BoneGroupDesc is already obtained by the caller; the function does not resolve its Group ID again. Returns INDEX_NONE if no Module matches or all entries are null. |
int32 FindAutomaticMotionPhaseRuleIndex(FName BoneGroupName, FName ModuleName) const |
Returns the first Rule index whose Region Motion Phase Signal, source/target Region, Module, and AutomaticMotionPhase timing all match. |
Returns INDEX_NONE if no Rule matches and does not modify the asset. |
static FName MakeAutomaticMotionPhaseResponseSetName(FName BoneGroupName) |
Returns an automatic Response Set name in the form Motion.ActionPhrase.<sanitized group>. |
Only creates the name; it does not add a Response Set. |
Static Resolution Helpers
| C++ Declaration |
Return · Output |
Preconditions |
static bool BuildExplicitBoneChain(const USkeleton* Skeleton, FName StartBoneName, FName EndBoneName, TArray<FName>& OutBoneChain) |
Writes a parent-child connected chain to OutBoneChain. |
Returns true only if the Skeleton and both bones are valid and Start lies on End's ancestor path. |
static void BuildResolvedAffectedBones(const FReferenceSkeleton& RefSkeleton, const FOverAnimBoneGroupDesc& BoneGroupDesc, TArray<FName>& OutBoneNames) |
Outputs the bone list after applying the explicit mask and hierarchy expansion. |
Only bones present in the input skeleton are meaningful in the returned list. |
static OverAnimMotionPhase::FActionChain ResolveAutomaticActionMotionChain(const FReferenceSkeleton& RefSkeleton, const FOverAnimBoneGroupDesc& BoneGroupDesc) |
Returns bone names and counts of valid and ignored explicit bones for PrimaryGuideChain. |
IsUsable() is true when at least two explicit connected Affected Bones exist. Helper branches and disconnected explicit bones may be excluded from the analysis chain. |
static FName ResolveMotionSampleBone(const FReferenceSkeleton& RefSkeleton, const FOverAnimBoneGroupDesc& BoneGroupDesc) |
Returns Fixed Analysis Bone or, as a legacy fallback, the deepest resolved Region bone. |
This does not mean all Automatic Action analysis uses only this one bone. If Fixed bone is empty, Analysis Method and ResolveAutomaticActionMotionChain() may take precedence. Returns None if no bone can be resolved. |
FOverAnimAutomaticActionMotionChain exposes BoneNames, ValidExplicitBoneCount, and IgnoredExplicitBoneCount. IsUsable() is true when BoneNames.Num() >= 2.
UOverAnimDeformerInstanceSettings is a UCLASS(Transient) C++ runtime context derived from UMeshDeformerInstanceSettings. External module classes that override UOverAnimDeformerModule::CreateInstance() receive this pointer and can read resolved measurements. This class is not BlueprintType and is not user-authored settings stored in Details or an asset.
| C++ Field |
Value at Creation |
Lifetime · Exposure Contract |
FOverAnimResolvedCharacterProportions CharacterProportions |
Character proportions resolved by CreateSettingsInstance(UMeshComponent*) from the Target Mesh and the asset's ProportionCalibration. |
Per-installation transient snapshot. Not exposed to Blueprint/Details and not saved to the asset. |
FOverAnimProportionCalibrationSettings ProportionCalibration |
Copy of the asset's ProportionCalibration. |
Calibration rules used to create the snapshot above. Users author them under Proportion Calibration; this runtime context is not the settings storage location. |
UOverAnimMeshDeformer::CreateSettingsInstance() creates this object and retains it for the Mesh Deformer lifecycle. Its public fields are read context for custom module extensions, but persistence or reinstallation behavior from direct construction or modification is not guaranteed as public API.
Pre-installation contract
UOverAnimComponent::ApplyOverAnim() becomes ready only when contracts for the Target Mesh, TargetSkeleton, Regions, Rules, and Modules all match. Every Rule must simultaneously satisfy its Signal name, Bone Group name, Module name, activation conditions, and Module support range.