1. Make a prop the world can offer
Pick any GameObject in your scene that a player should be able to hide as — a barrel, a crate, a chair.
- Add Prop World Object to it (Add Component → Transformation System).
- Give it a Collider sized to its physical footprint, if it has none.
- Create a definition:
Create → Transformation System → Prop Definition - Assign the definition to the Definition slot on the Prop World Object.
Repeat for as many props as you like. Two is enough to feel the mechanic.
2. Collect them
Create Create → Transformation System → Prop Registry and add your definitions to its list. You only need one registry per project.
The registry is what lets a prop be looked up by ID — for a saved loadout, a network message, or the Transform Into Prop (by ID) instruction. Duplicate IDs are rejected on import, so a copy-pasted definition cannot silently shadow the original.
3. Set up the hider
On the character who will hide, add Transform Controller and leave everything at its default. That is the whole component setup.
Now give them a way to transform. On the character, add a Trigger:
Event: On Key Down (E)
Conditions: Can Clone Prop = true
Action: Transformation System → Transform Into Prop
Target: SelfAnd a way back:
Event: On Key Down (Q)
Conditions: Is Disguised = true
Action: Transformation System → Revert To Character
Target: SelfTransform Into Prop uses whatever prop the character is looking at — no dropdown needed. Switching directly from one prop to another is supported; the player does not have to revert first. Press play. You should be a barrel.
4. Set up the hunter
- Add Hunter Interaction to the hunting character.
- Create
Create → Transformation System → Hunter Settingsand assign it. - Set Ray Origin to the hunter's camera — or leave it empty and the main camera is used, which is what makes a crosshair honest.
| Hunter Settings field | Start with | Why |
|---|---|---|
| Interaction Range | 6 | Measured from the character's feet, not the camera — so it is shorter in practice than it looks |
| Inspect Cooldown | 0.5 | Seconds between attempts |
| Interaction Layer | Props + Players | The nearest hit of anything wins, so you cannot target a prop through a wall |
| Aim Assist Radius | 0.15 | Sweeps a 15 cm probe instead of a line — a crosshair over a table is mostly gap |
| Wrong Guess Requires A Prop | On | Otherwise shooting the ground counts as a wrong guess and drains the hunter's health |
Event: On Key Down (Mouse 0)
Conditions: Is Pointer Over UI = false
Action: Transformation System → Hunter → Hunter Inspect (Raycast)
Hunter: SelfOn Correct Guess on the hunter and On Was Found on the prop player; a wrong guess fires On Wrong Guess. The asset applies no damage itself — wire those events to a Deal Damage instruction, so the number lives next to the thing that applies it. See Workflows.5. Add a round
- Put Round System on an empty GameObject.
- Create
Create → Transformation System → Round Settingsfor the prep and hunt durations, and assign it. Leaving the slot empty falls back to 30 s prep and 180 s hunt.
Event: On Start
Actions: Transformation System → Round → Register Prop Player (Hider: Self)
Transformation System → Round → Start RoundReport Prop Eliminated for an unregistered character is ignored, and says so in the console.Start Round finds the Round System in the scene automatically — no reference to drag. Assign a different Round Settings asset to the instruction to shape one round only: a long tutorial prep, a sudden-death hunt.
6. Put it on screen
Drop Round Timer Display onto a UI text object — legacy Text or TextMeshPro, either works — and press play. It finds the round system and the label by itself.
For anything else, use a property getter rather than a script. Bind Props Alive, Round Number, Round Timer (mm:ss), Current Prop Name or Whistle Cooldown straight into a label, a variable or a dialogue line — no arithmetic in the graph. The full list of 15 getters is on the Visual Scripting page.
If something does not work
Nothing happens on the transform key
The character is not looking at a Prop World Object, or its definition has Allow Cloning switched off.
The disguise appears at the wrong height
The prop’s own pivot is unusual. Ground Snap is on by default and handles most cases — switch it off only for props that should float.
A guess is always wrong
The target has no Transform Controller, or is not currently disguised. A hunter scores a correct guess only against a visible disguise.
The hunter hits the floor and pays for it
Switch on Wrong Guess Requires A Prop in the Hunter Settings asset, so only a hit carrying a Prop World Object counts as a guess.
An inspect is rejected even though the prop looks close
Interaction Range is measured from the character’s origin, at the feet — not from the camera. Something 3 m away and 1.5 m up costs about 3.35 m. Start at 6 rather than 3.
A node does not appear in the picker
The category is Transformation System/… — search the node’s title rather than browsing the tree.