The customization profile holds all the information how your character customizations are set up. Multiple of them are stored in an array of profiles and saved to and loaded from a save game file.
It is divided into several sub structures since each of them is handled differently in logic. All properties are directly connected to the BP_CharacterCustomization component. When we refer to variables other than the structure, then these are found in the component Blueprint.
Contains basic information of the profile itself.
Contains information about the body and head meshes.
Age and Size cannot work without a properly set up Anim Blueprint. Different Animation Modes like “Use Animation Assets” are not supported for these settings. Look at our Anim Blueprints if you want to implement Age and Size into your custom Anim Blueprint as well.
[V7] Head contains information about the head meshes from the Anatomy Profile.
Skin contains information about the body and head skin materials.
Eyes contains information about the eye and eyelashes materials.
Morph Targets contains information about all the morph targets set on the main character mesh.
Morph Target Groups contains information like which face morph target index or eyes morph target index is selected.
[V9] Anim Instance Alphas
contains scalar values that are sent over the interface message Character Anim Instance Interface > Set Anim Instance Alpha
to your Anim Blueprint. Make sure that the Anim Blueprint implements the interface and related logic.
You can find the following example implementations in our content:
ABP_ma_CharacterEditor
: Age
, Size
, Foot Transforms
ABP_Manny
: Age
, Size
, Muscles
, Weight
This screenshot shows that Age
and Size
have been moved into the new section Anim Instance Alphas
.
This single structure contains information about the hairstyle Customization Data Asset and more.
FCDA_HairstyleProfiles
, instead of a single BP_CDA_Hairstyle
. Thus, multiple hairstyles can be selected, which is used by our male beards. This way you could add e.g., head-hair, beard-hair, or any more fantasy-hair like arm-hair for werewolves etc. For each valid data asset, a new skeletal mesh component is added to the character. Can be empty if a bald character is desired.
FCDA_HairstyleProfile
.The new
FCDA_HairstyleProfile
structure currently contains only a singleBP_CDA_Hairstyle
reference that may seem like unnecessary overhead, but we wanted to introduce it as a structure for you and us to expand in the future. (See forFCDA_ApparelProfile
andFCDA_AttachmentProfile
, which make use of this expansion idea for specific per-data-asset-settings.)
[V2] This single structure (replaces [V1 removed] Apparel array of structures) contains information about all the selected apparels. The number of apparels is softly defined by the number of Apparel Picker widgets in the Character Editor widget but can be technically any number.
This single structure contains information about all the selected equipment.
NOTE Opposing the Apparel Profile, it cannot currently be assigned in the in-game editor, but only via the customization details of the BP_Character or BP_CharacterCustomization component. It is intended to be another technical approach for you to add skeletal equipment like tools, weapons, or backpacks. See BP_CDA_Equipment for details.
This single structure contains information about all desired attachments. As hairstyles and apparels, you can add any number of attachments.
Currently, there is no widgets in the Character Editor to control attachments, but you can add them in the Unreal editor viewport. We have delivered one example hammer to play with.
Since the Replication Update, our product contains the FCustomizationProfileMetaData_V2_Replicable structure. It is used for conversion between the normal and the replicable structure to be transferred properly between server and clients, because Unreal Engine 4.27 still does not have network support for TMaps.
TMaps is the comfort feature we want to persist for working with customization profiles in Details Panels as it can display all our named values (Scalar Parameters, HDR Vector Parameters etc.) in a more pleasant and intuitive way than TArrays of named structures can.
As you can see TArrays are way more bloated, especially if you want to control multiple values. You even have to expand the indexes (0, 1, etc.) to be able to edit the names and values. TMaps is just more fun to use.
Now, to handle this missing replication feature, we have prepared replicable structures for all our customization profile related structures that hold TArrays of named structures instead of TMaps like seen above. Matching that there is also a small set of library functions to convert between those and the normal structures.
The functions take the normal or replicable profile structure and convert all TMaps to TArrays and vice-versa:
The conversion is done like this:
This table allows you to store preset profiles, that you can either
Initialization Behavior
equal to Use Profile to Load
or Open Character Editor with Profile to Load
orSince the Utility Update, the BP_CharacterCustomization > PresetDataTable
is superficially validated in UpdatePresetCustomizationProfiles
to make sure the correct table is assigned. "Superficially" means, that we only check for its name and assume it has been created correctly in the first place, since we cannot check for the underlying table structure in Blueprints.
Our default data table is DT_PresetCustomizationProfiles_V9
, where you can add anatomies as you desire, but when creating your own table, make sure you either copy our latest table or use the latest structure FCustomizationProfile_V9
for creating a new table and have the latest version "V9" in its name, e.g. DT_MyCustomName_V9_MyCustomSuffix
.
If the name does not contain "V9" and you would assign it to BP_CharacterCustomization >
PresetDataTable
, the logic assumes that you did assign one of the older data tables from previous versions.In this case the following error is thrown:
Error: Invalid Preset Data Table version.
Please use a Preset Data Table based on 'FCustomizationProfile_V9'. The name of a custom table must also contain "V9" to be valid. Check your Blueprint defaults or the current instance overrides in the Details panel for the currently assigned table and change them to a valid table.