From 3d60e6de16ee4b80c72afd38e3eed7e759b1e4e6 Mon Sep 17 00:00:00 2001 From: undefined303 <54739035+undefined303@users.noreply.github.com> Date: Wed, 25 Feb 2026 13:24:01 +0800 Subject: [PATCH 1/3] fix part of #117 --- src/viewer.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/viewer.ts b/src/viewer.ts index 72a453b7..e38e6201 100644 --- a/src/viewer.ts +++ b/src/viewer.ts @@ -562,6 +562,9 @@ export class SkinViewer { this.recreateEarsTexture(); if (options.ears === true) { this.playerObject.ears.visible = true; + if (this._nameTag) { + this._nameTag.position.y = 25; + } } } } else { @@ -628,6 +631,9 @@ export class SkinViewer { if (options.makeVisible !== false) { this.playerObject.ears.visible = true; + if (this._nameTag) { + this._nameTag.position.y = 25; + } } } else { return loadImage(source).then(image => this.loadEars(image, options)); @@ -636,6 +642,9 @@ export class SkinViewer { resetEars(): void { this.playerObject.ears.visible = false; + if (this._nameTag) { + this._nameTag.position.y = 20; + } this.playerObject.ears.map = null; if (this.earsTexture !== null) { this.earsTexture.dispose(); @@ -903,7 +912,7 @@ export class SkinViewer { // Add the new name tag to the scene this.playerWrapper.add(newVal); // Set y position - newVal.position.y = 20; + newVal.position.y = this.playerObject.ears.visible ? 25 : 20; } this._nameTag = newVal; From 51f1d963fa7cbcda0500ebecbb4c6cfc57cc389c Mon Sep 17 00:00:00 2001 From: undefined303 <54739035+undefined303@users.noreply.github.com> Date: Wed, 25 Feb 2026 16:36:33 +0800 Subject: [PATCH 2/3] fix #117 --- src/viewer.ts | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/viewer.ts b/src/viewer.ts index e38e6201..1502ab8e 100644 --- a/src/viewer.ts +++ b/src/viewer.ts @@ -21,6 +21,7 @@ import { Scene, Texture, Vector2, + Vector3, WebGLRenderer, AmbientLight, type Mapping, @@ -328,6 +329,7 @@ export class SkinViewer { private onDevicePixelRatioChange: () => void; private _nameTag: NameTagObject | null = null; + private nameTagYOffset: number = 20; constructor(options: SkinViewerOptions = {}) { this.canvas = options.canvas === undefined ? document.createElement("canvas") : options.canvas; @@ -563,7 +565,8 @@ export class SkinViewer { if (options.ears === true) { this.playerObject.ears.visible = true; if (this._nameTag) { - this._nameTag.position.y = 25; + this.nameTagYOffset = 25; + this._nameTag.position.y = this.nameTagYOffset; } } } @@ -632,7 +635,8 @@ export class SkinViewer { if (options.makeVisible !== false) { this.playerObject.ears.visible = true; if (this._nameTag) { - this._nameTag.position.y = 25; + this.nameTagYOffset = 25; + this._nameTag.position.y = this.nameTagYOffset; } } } else { @@ -643,7 +647,8 @@ export class SkinViewer { resetEars(): void { this.playerObject.ears.visible = false; if (this._nameTag) { - this._nameTag.position.y = 20; + this.nameTagYOffset = 20; + this._nameTag.position.y = this.nameTagYOffset; } this.playerObject.ears.map = null; if (this.earsTexture !== null) { @@ -677,11 +682,14 @@ export class SkinViewer { return loadImage(source).then(image => this.loadBackground(image, mapping)); } } - private draw(): void { const dt = this.clock.getDelta(); if (this._animation !== null) { this._animation.update(this.playerObject, dt); + if (this._nameTag) { + this._nameTag.position.y = + this.playerObject.skin.head.getWorldPosition(new Vector3()).y + this.nameTagYOffset - 8; + } } if (this.autoRotate) { if (!(this.controls.enableRotate && this.isUserRotating)) { @@ -872,6 +880,9 @@ export class SkinViewer { this.playerObject.resetJoints(); this.playerObject.position.set(0, 0, 0); this.playerObject.rotation.set(0, 0, 0); + if (this._nameTag) { + this._nameTag.position.y = this.nameTagYOffset; + } this.clock.stop(); this.clock.autoStart = true; } From 1e79d6d007f55e6ce7c1ac279eb277d9ec0bcf11 Mon Sep 17 00:00:00 2001 From: undefined303 <54739035+undefined303@users.noreply.github.com> Date: Thu, 26 Feb 2026 01:37:25 +0800 Subject: [PATCH 3/3] fix bug of previous code --- src/viewer.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/viewer.ts b/src/viewer.ts index 1502ab8e..eb3af670 100644 --- a/src/viewer.ts +++ b/src/viewer.ts @@ -923,7 +923,8 @@ export class SkinViewer { // Add the new name tag to the scene this.playerWrapper.add(newVal); // Set y position - newVal.position.y = this.playerObject.ears.visible ? 25 : 20; + this.nameTagYOffset = this.playerObject.ears.visible ? 25 : 20; + newVal.position.y = this.nameTagYOffset; } this._nameTag = newVal;