feat: sdk | scene name tag - #9829
Draft
popuz wants to merge 24 commits into
Draft
Conversation
# Conflicts: # Explorer/Assets/DCL/AvatarRendering/AvatarShape/Tests/PerformanceTests.meta # Explorer/Assets/DCL/AvatarRendering/AvatarShape/Tests/PerformanceTests/AvatarOutlineFrustumHoistPerformanceTest.cs.meta # Explorer/Assets/DCL/AvatarRendering/AvatarShape/Tests/PlayMode/BoneMatrixCalculationJobPerformanceTest.cs.meta # Explorer/Assets/DCL/Infrastructure/ECS/Unity/Transforms/Tests/PerformanceTests.meta # Explorer/Assets/DCL/Infrastructure/ECS/Unity/Transforms/Tests/PerformanceTests/SetWorldTransformCachePerformanceTest.cs.meta # Explorer/Assets/DCL/Landscape/Tests.meta # Explorer/Assets/DCL/Landscape/Tests/PerformanceTests.meta # Explorer/Assets/DCL/Landscape/Tests/PerformanceTests/GroundContainerReuse.meta # Explorer/Assets/DCL/Landscape/Tests/PerformanceTests/GroundContainerReuse/RenderGroundContainerReusePerformanceTest.cs.meta # Explorer/Assets/DCL/Tests/PlayMode/PerformanceTests/EventsStateServiceLookupPerformanceTest.cs.meta # Explorer/Assets/DCL/Tests/PlayMode/PerformanceTests/PlacesStateServiceLookupPerformanceTest.cs.meta
Scenes can now put a short line of text above a player's native nametag. The immediate use case is player ranks, which scenes fake today with a billboarded TextShape on the NAME_TAG anchor that matches nothing about the real nametag. Protocol: PBAvatarNametag, component id 1221 (decentraland/protocol#467). The component is written on the player entity itself - engine.PlayerEntity for the local player, getPlayer({ userId }).entity for anyone else - so there is no target field to resolve, and comms cannot relay it because entity ids below 512 are dropped. The plate is therefore local to the client that renders it, and a scene that wants everyone to see the same plate distributes it through its own state. PropagateSceneAvatarTagSystem bridges the scene world into the global world: - target resolution is O(1) and stays clear of FindAvatarUtils - CRDT id 1 maps to the injected global player entity, anything else reads SDKProfile.UserId off the same scene entity and goes through EntityParticipantTable; - an unresolved target leaves IsDirty set, so the write replays once the avatar exists, and SceneAvatarTagApplied records where a plate landed so a recycled remote entity id drops the old plate before claiming a new one; - removal always goes through IsRemoving, never World.Remove - the placement system hides the plate first and removes the component afterwards; - an absent label or background color inherits the native nametag color. Gating: portable experiences never get the system injected at all; plates are dropped when the scene stops being current and replayed on return (ISceneIsCurrentListener), and dropped on scene unload (IFinalizeWorldSystem). V1 covers player entities only. A scene-spawned AvatarShape resolves to nothing by construction, since its text over the head already comes from PBAvatarShape.name and a second channel would mean two sources of truth. scripts/package.json pins the protocol PR tarball - repin to @dcl/protocol@experimental once #467 is merged and synced.
popuz
marked this pull request as ready for review
August 21, 2026 13:58
popuz
marked this pull request as draft
August 21, 2026 13:58
# Conflicts: # Explorer/Assets/DCL/Infrastructure/Global/ComponentsContainer.cs # Explorer/Assets/Protocol/DecentralandProtocol/ComponentID.gen.cs # Explorer/Assets/Protocol/DecentralandProtocol/ExplorerUi.gen.cs.meta # Explorer/Assets/Protocol/DecentralandProtocol/ExplorerUiEventsResult.gen.cs.meta
Contributor
🚦 CI StatusWindows and Mac build successful in Unity Cloud! You can find a link to the downloadable artifact below. No C# files changed — lint ratchet skipped. Waiting for tests to start… |
This comment has been minimized.
This comment has been minimized.
… only normal nametags
Mirror the chat TMP setup in the nametag UITK panel: emojis32_uitk goes into PanelTextSettings emoji fallback, so plate labels, names and chat bubbles render emoji from the already-shipped emojis32 atlas instead of missing-glyph squares. No new build content: the sprite asset and its texture were already referenced. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
…at/sdk/scene-name-tag
This comment has been minimized.
This comment has been minimized.
# Conflicts: # scripts/package-lock.json # scripts/package.json
The previous pin predated main's Pulse/EngineInfo protocol bump; the refreshed protocol PR branch now carries both, so a build-protocol run no longer rolls main's codegen back. AvatarNametag docstrings catch up with the implemented NPC support and nametags-toggle behavior. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Figma node 13712-3846: capsule radius, 1px/6px padding, 1.5px border at 20% white. Font (Inter 600 14px) and the default colors (#161518 bkg, #FCFCFC label) already matched and stay untouched. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
An unset border_color took a translucent white rim derived from the background, which every scene got whether it asked for one or not. It now takes the background color itself, so the rim is opt-in and the plate reads as a flat capsule by default; the 1.5px width stays either way, so the plate never changes size. The USS border color only ever shows in the UI Builder preview - the runtime paints all four sides before the plate is displayed - so it follows the same default. NATIVE_BORDER_COLOR had no callers left. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This comment has been minimized.
This comment has been minimized.
popuz
commented
Sep 1, 2026
Comment on lines
-19
to
20
| "@dcl/protocol": "^1.0.0-32905037810.commit-4ed8d74", | ||
| "@dcl/protocol": "https://sdk-team-cdn.decentraland.org/@dcl/protocol/branch//dcl-protocol-1.0.0-33210268884.commit-41ca04b.tgz", | ||
| "@protobuf-ts/protoc": "^2.11.0", |
Collaborator
Author
There was a problem hiding this comment.
replace after protocol merge
This comment has been minimized.
This comment has been minimized.
Contributor
|
PR #9829, run #33549490595 Overall: ✅ no significant changes Builds: Windows change, Windows baseline, macOS change, macOS baseline How to read this table
Intel Core i5
Apple M1
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Pull Request Description
What does this PR change?
Test Instructions
Steps (standard run):
metaforge explorer run XXXX # ← replace with this PR numberExpected result:
Steps (fresh account):
metaforge account create --clear metaforge explorer run XXXX # ← replace with this PR numberExpected result:
Automation (if applicable):
metaforge explorer test XXXXPrerequisites
Test Steps
Additional Testing Notes
Quality Checklist
Code Review Reference
Please review our Branch & PR Standards before submitting. It explains the automated review flow, QA/DEV approval requirements, and what each label does — especially useful for first-time contributors.