This ADR describes the emotes system used in the Decentraland Explorer (decentraland/unity-explorer), which replaces the emotes system described in ADR-66 (now deprecated). The new system uses Unity's Mecanim AnimatorController, ECS components for state tracking, and an asset-bundle-based pipeline for emote loading.
The old emotes system (ADR-66) was built on the unity-renderer architecture, relying on DataStore for state management, RefCountedCollections for lifecycle tracking, and the plugin pattern from ADR-56.
The new explorer client uses the Mecanim animation system instead of Legacy Animation, requiring a different approach to loading and playing emotes at runtime.
The explorer uses Unity's Mecanim system with AnimatorController for emote
playback. This enables complex animation transitions with the locomotion system.
Since Unity does not allow creating non-legacy animation clips at runtime, the asset bundle
conversion pipeline was modified: each emote's asset bundle now includes a pre-built
AnimatorController with a simple transition and a trigger named after the clip.
CharacterEmoteIntent component (the intent to play an
emote)
CharacterEmoteSystem consumes the intentCharacterEmoteComponent tracks the current emote state on the entityExtended emotes support props via a naming convention for clips:
Documentation: https://docs.decentraland.org/creator/emotes/props-and-sounds/
The EmotePlayer class handles:
EmoteReferences (MonoBehaviour with references) serves as pool key
Non-blockchain emotes are stored in the EmbeddedEmotes/ExtendedEmotes folder. Old
emotes (legacy animation clips) are converted to the AnimatorController format via an editor
script (EmbeddedEmotesEditor.cs).
| Aspect | ADR-66 (Old) | This ADR (New) |
|---|---|---|
| Animation system | Legacy Animation component | Mecanim AnimatorController |
| State management | DataStore + RefCountedCollection | ECS components (CharacterEmoteComponent) |
| Intent system | DataStore events | CharacterEmoteIntent ECS component |
| Architecture | Plugin pattern (ADR-56) | ECS systems in DCL/AvatarRendering/Emotes/Systems |
| Asset format | GLB with animation clips | Asset Bundles with pre-built AnimatorController |
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 and RFC 8174.