Here is a method that I used for character customization:
Setup an array or hash table that corresponds to the area you are changing.
EG. HeadItems - array, LeftHand -array.
Put all the gameobjects that need to go in that spot into the proper array.
Then I set the following as global variables: (probably not the best method, but one I personally found most consistent). I use all caps for Globals.
PLAYER_OBJECT - As GameObject
HELMET_ITEM - As String
To set and change the equipment: using a helmet as an example
Local FSM Variables needed
Gameobject - NewHelmetObject
Gameobject - OldHelmetObject
GameObject - HeadMountPoint
GameObject - ArrayResult
Int - IndexID
String - CurrentHelmet_String
String - array/hash table reference (optional)
String - Child mount point location (optional)
State1:
Load key to fill CurrentHelmet_String (Easy Save preferred). Default is blank
Holder state that is fired off from a send event - eg. Change_Helmet
State2: check for valid object
Array List contains game object:
Check HELMET_ITEM string to see if array list contains the object
Game Object: Owner or Specify Game Object
Reference: HeadItems
Game Object Name: HELMET_ITEM
Result: ArrayResult
Result Index: IndexID
If true go to State3 - change
If False go to state5 - default catch
State3: Create and place new object from array/Hash table
Array List get: Get your object from the array. store as NewHemletObject.
Find Child:
GameObject: PLAYER_OBJECT
Child Name: (eg) Player/Head/Hat/MountPoint
Store Result: HeadMountPoint
Create Object Advanced (ecosystem):
GameObject: NewHelmetObject
Parent: HeadMountPoint
Set Active: Check
Store Object: OldHelmetObject (important so you can destroy old hat if equipped)
String compare: HELMET_ITEM to CurrentHelmet_String. If not matching fire event to move to State4
State4: Destroy item and reset
Set String Value: CurrentHelmet_String to HELMET_ITEM
Save: CurrentHelmet_String (Easy Save)
Destroy object: OldHelmetObject
FINISHED Event points back to State2
State5: Set to default
Set String CurrentHelemt_String: Set this string to a default object in your array - array item can be empty (none)
Set String HELMET_ITEM string: Set to same name as above
FINISHED Event - Go to State2
I am looking forward to what others may have done as well.
Always up for learning