Skip to main content

Adding Hair & Outfits (Modular Avatar)

For the basic outfit setup with Modular Avatar (MA) — MA Merge Armature, etc. — refer to the official tutorial.

This page explains the steps to match the 3+1 format, assuming the outfit is already working with MA.

Bundling multiple outfits into one avatar is not recommended. Packing multiple outfits into a single avatar via menu toggles means all outfit textures and meshes are always included, which can push the avatar's download size into the hundreds of MB. Consider uploading each outfit as a separate avatar.

Delete SA_COS_A first. Before adding a new outfit, delete the SA_COS_A object from the Hierarchy. Leaving SA_COS_A in place while adding another outfit will cause the COS_A toggle to persist in the closet menu, resulting in unintended parameter and visual states.


Adding to the Closet Menu

The 3+1 closet uses a submenu called 3+1 OutfitMenu.asset, into which each outfit inserts toggles. COS_A inserts SA_COS_A OutfitMenu.asset (three toggles: CostumeHead / CostumeBody / CostumeSkirt) into this submenu via MA Menu Installer.

1. Prepare Animation Clips

Outfit ON/OFF is controlled via animation clips. Using COS_A's animation clips as a reference, create clips that toggle GameObject.IsActive on the outfit object.

2. Set Up the Animator Controller

Add the clips to a layer in the Animator Controller and build a state machine that switches ON/OFF using a Bool parameter. Copying and modifying COS_A's setup is the quickest approach.

3. Add MA Menu Item and MA Menu Installer

On the outfit object, use Add Component to add both MA Menu Item and MA Menu Installer.

MA Menu Item settings:

FieldValue
NameLabel name
IconAny icon image
TypeToggle
ParameterParameter name in the Animator Controller
Value1

MA Menu Installer settings:

FieldValue
Install Target Menu3+1 OutfitMenu.asset
Referring to COS_A's SA_COS_A OutfitMenu.asset when setting the icon and parameter name makes it easy to keep things consistent.

Controlling Outfit-Specific Changes

When an outfit requires changes to shape keys or PhysBone configuration, use MA components for dynamic control rather than animation.

MA Shape Changer

Use this when the outfit needs to modify shape keys on the base mesh when worn. Add Add ComponentMA Shape Changer to the outfit object, then set the target shape keys and values. Changes are applied and released automatically in sync with the outfit's ON/OFF state.

COS_A controls the following shape keys via MA Shape Changer. When the outfit is turned OFF, these values return to 0 — this is expected behavior of MA Shape Changer.

Shape KeyOutfit ONOutfit OFF
adj_bust_cloth11000
adj_bust_inner_omitting1000
adj_shrink_hip(s)11000
opt_hekochiku100
If you want another outfit to control the same shape keys, add MA Shape Changer to that outfit object as well and set the same values.

MA Object Toggle

Use this when specific objects (such as PhysBone colliders) need to be toggled ON/OFF when the outfit is worn. Add Add ComponentMA Object Toggle to the outfit object, then set the target objects and desired states.


Matching MA Parameters

To use the same parameter configuration as COS_A, add MA Parameters to the outfit object and configure it as follows.

Parameter NameTypeDefault ValueSaved
CostumeHeadBool0OFF
CostumeBodyBool0OFF
CostumeSkirtBool0OFF
Setting Saved to OFF resets the toggle on world change. Set Saved to ON if you want the state to always be preserved.

Matching MA Merge Animator

If the outfit has its own animator, add MA Merge Animator and use the same settings as COS_A.

SettingValue
Animator to MergeOutfit Animator Controller
Layer TypeFX
Delete Attached AnimatorON
Path ModeRelative
Match Avatar Write DefaultsON

Matching lilToon Settings

The Brightness (Brightness parameter) and Monochrome Lighting (Lighting(mono) parameter) in the preference menu work by having the COS_A animator directly control each material's _LightMinLimit / _MonochromeLighting.

Materials on newly added meshes are outside the scope of this animator, so aligning the default values with the base avatar ensures visual consistency when the radial is not in use.

For details, see Shader Settings.

PropertyMin (Radial 0)Max (Radial 1)
_LightMinLimit0.051.0
_MonochromeLighting0.51.0
If you want new parts to follow brightness or monochrome changes from the radial, you need to add the new mesh's material slots to COS_A's animation clips.