Caution: Fraudulent or imitation websites may appear. Only this site is official. Report concerns on our Report Fraud page.
Syncing cosmetics is how your VR fangame ensures that every player sees the correct hat, badge, material, or holdable item on every other player in the room.
Unlike hands and head, cosmetics should not be synced using transforms — they should be synced using Photon Custom Player Properties.
This page explains how cosmetic syncing works, why it must be done with properties instead of transforms, and how to structure your cosmetic system for smooth multiplayer performance.
1. What Cosmetic Syncing Does
Cosmetic syncing ensures that every player sees:
The correct hat
The correct badge
The correct material/color
The correct holdable item
The correct cosmetic combinations
Cosmetics define identity in VR games — they must be accurate and consistent.
2. Why Cosmetics Should NOT Use Transform Syncing
Transform syncing is meant for movement, not appearance.
If you try to sync cosmetics using PhotonTransformView:
It wastes bandwidth
It causes jitter
It breaks when cosmetics change
It desyncs when players respawn
It creates unnecessary network traffic
Cosmetics don’t move independently — they attach to the head or hands.
So instead of syncing transforms, you sync IDs.
3. How Cosmetics SHOULD Be Synced
Cosmetics should be synced using:
Photon Custom Player Properties
Each player stores cosmetic data like:
"hat": "HAT_RED"
"badge": "BADGE_MOD"
"material": "MAT_GOLD"
"holdable": "BANANA"
When a property changes:
Photon automatically updates it for all players
Other players detect the change
They load the correct cosmetic locally
This is lightweight, efficient, and reliable.
4. Recommended Cosmetic Property Structure
Use a simple, readable structure:
Property Example Value Purpose
hat "HAT_SANTA" Head cosmetic
badge "BADGE_DEV" Badge cosmetic
material "MAT_BLUE" Player material
holdable "CANDY_CANE" Hand item
color "#ff0000"" Player color
These values are strings, not objects.
5. When Cosmetic Properties Update
Cosmetic properties should update when:
The player equips a new cosmetic
The player joins a room
The player respawns
The player changes color/material
The player switches holdables
Photon will automatically broadcast the updated properties.
6. Loading Cosmetics on Other Players
When another player’s properties change:
Photon notifies your script
Your script reads the new cosmetic IDs
Your script loads the correct cosmetic prefab/material
Your script attaches it to the correct point (head, hand, etc.)
This ensures cosmetics always match the player’s current loadout.
7. Cosmetic Attach Points
Your player prefab should include:
Player
│
├── Head
│ └── HatAttachPoint
│
├── Body
│ └── BadgeAttachPoint
│
└── Hands
├── LeftHandAttachPoint
└── RightHandAttachPoint
Cosmetics are spawned locally and attached to these points.
8. What NOT to Sync
To avoid lag and bandwidth issues, do NOT sync:
Cosmetic transforms
Cosmetic physics
Cosmetic animations
Cosmetic meshes
Cosmetic textures
Cosmetic prefabs
Only sync IDs, not objects.
9. Best Practices
Use Custom Player Properties for all cosmetics
Keep cosmetic IDs short and consistent
Load cosmetics locally, not over the network
Use attach points for hats, badges, and holdables
Avoid syncing cosmetic transforms
Update properties only when necessary
Validate cosmetic ownership using PlayFab