LUIDA Docs
ComponentsUnity templateEditor windows

Configure avatars

Drop a VRM or humanoid prefab into the LUIDA Avatars window to register it in the scene's AvatarRegistry, so AssignAvatarToParticipant can spawn it at runtime by ID.

These pages are not yet fully reviewed. The LUIDA team is continuing to review and improve them. If you find anything wrong on these pages, or have questions that aren't resolved by reading them, please ask or report to the LUIDA team.

LUIDA › Configure avatars is the editor-side companion to the runtime action AssignAvatarToParticipant(avatarID, participantIndex). It manages the current scene's AvatarRegistry — a table from Avatar ID to a generated wrapper prefab — so your state-listening items can spawn researcher-supplied avatars by string ID without hardcoding prefab references.

If your experiment doesn't swap participant avatars (most don't), you can skip this window entirely. If you're doing embodiment research, avatar manipulation studies, or any paired study where each participant should look different from their Cluster default, this is where you register the avatars you'll later assign at runtime.

The LUIDA Avatars window with no avatars registered: a Register Avatars drop zone reading 'Drop .vrm file or humanoid .prefab here', an empty Registered Avatars (0) list, and an Add Avatar Spawner to Current Scene button.
Before registering anything: drop a .vrm or humanoid prefab into the zone at the top.
The LUIDA Avatars window with one registered avatar, default_avatar, showing its Avatar ID, Display Name, Source Prefab and Wrapper Prefab fields, optional bone-group checkboxes, Scale Mode, and a Remove button.
After registering: each entry shows its avatarID, prefab references, and per-avatar options.

What you register

Each entry under Registered Avatars shows:

FieldWhat it controls
Avatar IDThe name AssignAvatarToParticipant looks up, and what the action's dropdown lists. Defaults to the dropped file's name; editable. Case-sensitive — use a stable, code-friendly identifier (e.g., doctor_coat, not Doctor Coat #1).
Display NameLabel shown in the editor. Defaults to the file name; no runtime effect.
Source Prefab (read-only)The .vrm asset or humanoid prefab you dropped.
Wrapper Prefab (read-only)The CCK item LUIDA generated around the source. It carries AvatarSyncClone.js and the generated <Name>_BoneMap.js, which is what continuously syncs the wrapper's bones to the participant's avatar.
Optional bone groups (Feet / Toes, Fingers, Jaw)Extra bone groups to sync. Off by default.
Scale ModeHow the wrapper is scaled relative to the participant. Default Scale To Player.
Sync Hips Y PositionFollow the participant's hips height (crouching, jumping). On by default.

Remove deletes the entry. Toggling any sync option reveals a Rebuild button that regenerates the wrapper and bone map.

The registry belongs to the scene: each scene has its own AvatarRegistry, and a new scene starts empty.

How it interacts with the runtime

At session time:

  1. A state-listening item calls AssignAvatarToParticipant("doctor_coat", 1).
  2. The scene's LUIDA-AvatarSpawner item (running AvatarManager.js) looks up doctor_coat in the AvatarRegistry, finds the generated wrapper prefab, and spawns it as a CCK item at participant 1's current world position.
  3. AvatarSyncClone.js on the spawned wrapper reads participant 1's bone transforms each frame and applies them to the wrapper.
  4. Other players in the room see the wrapper rendered over (or in place of) the participant's normal Cluster avatar.

For the visual swap to look clean, the experiment's Participant Avatar mode in the Web Console must be HIDE — otherwise the original Cluster avatar shows through. See Web Console → Creating an experiment → World & Platform.

Registering an avatar

  1. Open LUIDA › Configure avatars.
  2. Drop one of the following onto the Register Avatars zone at the top of the window:
    • a .vrm file from outside the project — LUIDA copies and imports it (VRM 0.x and 1.0 both work; 0.x files are migrated to VRM 1.0 on import),
    • a .vrm asset already in the Project window, or
    • any humanoid prefab, for example an FBX-based model (A-posed rigs are fine).
  3. LUIDA generates the wrapper prefab and bone map, and a new entry appears under Registered Avatars with the Avatar ID set to the file name. Edit the ID if you want a different one; leave the other options at their defaults unless you have a reason.
  4. If the Avatar Spawner (Current Scene) section says there is no spawner, click Add Avatar Spawner to Current Scene (see below).

There is no Save button — the entry is written to the scene's registry immediately. The avatar is then callable from any state-listening item in this scene, and the Assign avatar to participant action offers it in a dropdown.

Always drop the source (.vrm or humanoid prefab), never the generated wrapper prefab. The wrapper bakes the source's rest pose into its bone map, which is what keeps non-normalized VRM 1.0 skeletons and A-posed FBX models animating correctly. After upgrading LUIDA, rebuild previously registered avatars so their bone maps gain the current data: toggle any sync option to reveal the Rebuild button, or re-drop the file.

Avatar Spawner

The bottom of the window shows whether the current scene contains a LUIDA-AvatarSpawner item. This item runs AvatarManager.js: it resolves participant numbers to players and spawns, syncs, and destroys the avatar wrappers. AssignAvatarToParticipant sends its request to this item, so without a spawner the action logs a warning and does nothing. Click Add Avatar Spawner to Current Scene once per scene; the shipped sample scenes already include one.

Where the registry is stored

The registry and everything generated for it live in a per-scene folder under Assets/_Experiment_/Avatars/. For the shipped ProteusSample scene:

Assets/_Experiment_/Avatars/ProteusSample/
  AvatarRegistry.asset   the registry this window edits
  Source/                the .vrm files you dropped
  Wrappers/              generated wrapper prefabs
  Generated/             generated <Name>_BoneMap.js files

Check the folder name LUIDA picks for your own scene the first time you register an avatar. Treat these files as managed by this window — edit only through the editor, not by hand.

When to use this window vs. the Web Console avatar settings

There are three avatar-related settings to keep straight:

WhereWhat it does
Web Console → Creating an experiment → Participant Avatar mode (HIDE / DEFAULT / UNRESTRICTED)Project-wide policy for what avatar participants render with. See create-experiment.
Web Console → experiment → Avatars tab(Deprecated per-world avatar set; most projects don't use this.) See Web Console → Avatars.
This window (LUIDA › Configure avatars)Per-scene registry of generated avatar wrappers that AssignAvatarToParticipant looks up.

In short: the Web Console controls what the participant looks like by default; this window controls what you can swap them into at runtime.

Common pitfalls

  • avatarID typo. AssignAvatarToParticipant("doctorcoat", 1) silently no-ops if the registry has it as doctor_coat. Case-sensitive, exact match.
  • Forgetting the Web Console mode. With participantAvatarMode = UNRESTRICTED, the participant's Cluster avatar renders behind the LUIDA wrapper and you'll see double. Set to HIDE.
  • No LUIDA-AvatarSpawner in the scene. The assign action only logs a warning. Add one from the bottom of this window.
  • Per-scene registry. Registrations don't carry over to a new scene. If you copy a state-listening setup that calls AssignAvatarToParticipant("foo", 1) into another scene (or project), register foo there as well.

Where to go next