A Value Type is a delegation of types within the FrooxEngine Data Model and ProtoFlux. In contrast to Reference Types, fields containing a value type store the value directly, rather than a reference to the value.
For a list of all value types in game, refer to Category:Value Types.
In FrooxEngine
It's simple to tell whether a certain type is a value type or not within FrooxEngine. In the Scene Inspector, fields holding a value type are easily identifiable by the ability to directly edit the value within them, rather than needing to drag in a reference to the type. A ValueField component is able to hold any FrooxEngine value type, which can be used as a quick reference to tell what is what.
In ProtoFlux
In ProtoFlux, in short, if a type can be classified as an unmanaged type in C#, it is recognized as a value type. Otherwise, it is an Object Type.
To expand on the definition, in ProtoFlux, an unmanaged type, or value type, must either (criteria not useful to Resonite excluded):
- Be one of
sbyte
,byte
,short
,ushort
,int
,uint
,long
,ulong
,char
,float
,double
,decimal
, orbool
. - Be an Enum type.
- Be defined as a non-nullable
struct
internally that only contains other value types.- This encompasses many different types, such as float3, DateTime, and TangentPointFloat.
- This excludes Nullable types from being a ProtoFlux value type, such as
int?
.
This discrepency between the definition of a value type in FrooxEngine and in ProtoFlux can cause some confusion. For example, a string is a value type in FrooxEngine, but an object type in ProtoFlux. This is also the case with nullable types.