Navigation
API > API/Runtime > API/Runtime/MovieScene
A variant type that masquerades as a numeric (double) value.
This type is 8 bytes (sizeof(double)) and uses a technique called NaN-boxing to encode variants into those 8-bytes, while a literal double value maintains the exact same bits in-memory as a double. By default this variant can only represent a double, or a UMovieSceneNumericVariantGetter*, but additional variant types can be encoded by deriving from this type and associating type 'IDs' to typed-data (upto 48 bit in size), where the type bits are encoded into the nan bits of the double.
Extensive reading around NaN-boxing techniques can be found elsewhere.
UMovieSceneNumericVariantGetter may be used to assign an external, dynamic value to this variant.
The benefit of using this technique is that this type can be used as a drop-in replacement for any double member variable to provide it with dynamic getter functionality without inflating the size of the class, and with barely any runtime overhead whatsoever. Automatic UPROPERTY upgrade exists for all numeric property types that make sense: int64 and uint64 are not supported in this variant due to loss of precision (doubles only have 52 bits of mantissa)
| Name | FMovieSceneNumericVariant |
| Type | struct |
| Header File | /Engine/Source/Runtime/MovieScene/Public/Variants/MovieSceneNumericVariant.h |
| Include Path | #include "Variants/MovieSceneNumericVariant.h" |
Syntax
USTRUCT (BlueprintType )
struct FMovieSceneNumericVariant
Constructors
| Name | Remarks | Include Path | Unreal Specifiers |
|---|---|---|---|
FMovieSceneNumericVariant
(
double InValue |
Initialize this variant to an explicit literal value | Variants/MovieSceneNumericVariant.h | |
FMovieSceneNumericVariant
(
UMovieSceneNumericVariantGetter* InGetter |
Initialize this variant to an object pointer that provides a value | Variants/MovieSceneNumericVariant.h | |
| Move-assign and constructible | Variants/MovieSceneNumericVariant.h | ||
FMovieSceneNumericVariant
(
const FMovieSceneNumericVariant& Other |
Functionally non-copyable except to the reflection layer - use Deep/Shallow copy instead | Variants/MovieSceneNumericVariant.h | |
| No init constructor that leaves the underlying memory uninitialized | Variants/MovieSceneNumericVariant.h | ||
| Default constructor - initializes this variant to a value of 0.0 | Variants/MovieSceneNumericVariant.h |
Constants
| Name | Type | Remarks | Include Path |
|---|---|---|---|
| CUSTOMPTR_FlagBits | uint64 | Variants/MovieSceneNumericVariant.h | |
| CUSTOMPTR_Weak | uint64 | Variants/MovieSceneNumericVariant.h | |
| EXP_Bits | uint64 | Variants/MovieSceneNumericVariant.h | |
| HIGH_Bits | uint64 | Flags specifying different regions on an IEEE 754 double. | Variants/MovieSceneNumericVariant.h |
| PAYLOAD_Bits | uint64 | Variants/MovieSceneNumericVariant.h | |
| QUIET_Bit | uint64 | Variants/MovieSceneNumericVariant.h | |
| SIGN_Bit | uint64 | Variants/MovieSceneNumericVariant.h | |
| TAGGED_Bits | uint64 | Variants/MovieSceneNumericVariant.h | |
| TYPE_Bits | uint64 | Variants/MovieSceneNumericVariant.h | |
| TYPE_CustomPtr | uint64 | Variants/MovieSceneNumericVariant.h |
Variables
Protected
| Name | Type | Remarks | Include Path | Unreal Specifiers |
|---|---|---|---|---|
| Data | uint8 | Variants/MovieSceneNumericVariant.h | ||
| WeakCustomGetter | TWeakObjectPtr< UMovieSceneNumericVariantGetter > | Variants/MovieSceneNumericVariant.h |
Functions
Public
| Name | Remarks | Include Path | Unreal Specifiers |
|---|---|---|---|
void AddStructReferencedObjects
(
FReferenceCollector& Collector |
Variants/MovieSceneNumericVariant.h | ||
FMovieSceneNumericVariant DeepCopy
(
UObject* NewOuter |
Make a deep copy of this variant by duplicating the underlying UMovieSceneNumericVariantGetter into a new outer if necessary. | Variants/MovieSceneNumericVariant.h | |
bool ExportTextItem
(
FString& ValueStr, |
Variants/MovieSceneNumericVariant.h | ||
double Get() |
Retrieve this variant's numeric value | Variants/MovieSceneNumericVariant.h | |
| Retrieves this variant as a UMovieSceneNumericVariantGetter pointer. | Variants/MovieSceneNumericVariant.h | ||
double GetLiteral() |
Retrieves this variant as a literal double representation. | Variants/MovieSceneNumericVariant.h | |
float GetLiteralAsFloat() |
Retrieves this variant as a literal double representation, clamped to the range of a float. | Variants/MovieSceneNumericVariant.h | |
| Variants/MovieSceneNumericVariant.h | |||
uint8 GetTypeBits() |
Retrieve the type flags for this variant. : Only valid to be called where IsLiteral() == false. | Variants/MovieSceneNumericVariant.h | |
bool Identical
(
const FMovieSceneNumericVariant* Other, |
Variants/MovieSceneNumericVariant.h | ||
bool ImportTextItem
(
const TCHAR*& Buffer, |
Variants/MovieSceneNumericVariant.h | ||
bool IsCustomPtr() |
Checks whether this variant is a UMovieSceneNumericVariantGetter pointer (ie, GetCustomPtr is valid to call). | Variants/MovieSceneNumericVariant.h | |
bool IsLiteral() |
Checks whether this variant is a literal double value or a different type | Variants/MovieSceneNumericVariant.h | |
void MakeWeakUnsafe () |
If this variant wraps a UMovieSceneTimeWarpGetter, turn it into an unsafe weak reference. | Variants/MovieSceneNumericVariant.h | |
bool Serialize
(
FArchive& Ar |
For StructOpsTypeTraits | Variants/MovieSceneNumericVariant.h | |
bool SerializeCustom
(
FArchive& Ar, |
Variants/MovieSceneNumericVariant.h | ||
bool SerializeFromMismatchedTag
(
const FPropertyTag& Tag, |
Variants/MovieSceneNumericVariant.h | ||
void Set
(
double InLiteralValue |
Assign a new literal value to this variant, clearing any knowledge of a previously assigned value. | Variants/MovieSceneNumericVariant.h | |
void Set
(
UMovieSceneNumericVariantGetter* InDynamicValue |
Assign a new dynamic value to this variant. | Variants/MovieSceneNumericVariant.h | |
void SetTypeBits
(
uint8 InType |
Set the type flags for this variant - should only be used where custom typed data is assigned | Variants/MovieSceneNumericVariant.h | |
void SetTypedData
(
const T& InValue, |
Assign new, implementation defined typed data to this variant. | Variants/MovieSceneNumericVariant.h | |
void SetWeakUnsafe
(
UMovieSceneNumericVariantGetter* InDynamicValue |
Assign a new dynamic value to this variant as an unsafe weak ptr. | Variants/MovieSceneNumericVariant.h | |
| Make a shallow (bitwise) copy of this variant. | Variants/MovieSceneNumericVariant.h | ||
T UnsafePayloadCast () |
Cast this variant to a user-defined type. | Variants/MovieSceneNumericVariant.h |
Operators
| Name | Remarks | Include Path | Unreal Specifiers |
|---|---|---|---|
FMovieSceneNumericVariant & operator=
(
const FMovieSceneNumericVariant& Other |
Variants/MovieSceneNumericVariant.h | ||
| Variants/MovieSceneNumericVariant.h |