diff --git a/packages/3d-web-client-core/src/camera/CameraManager.ts b/packages/3d-web-client-core/src/camera/CameraManager.ts index 31bb0425..754df5ed 100644 --- a/packages/3d-web-client-core/src/camera/CameraManager.ts +++ b/packages/3d-web-client-core/src/camera/CameraManager.ts @@ -25,6 +25,7 @@ export class CameraManager { public targetDistance: number = this.initialDistance; private distance: number = this.initialDistance; + private desiredDistance: number = this.initialDistance; private targetPhi: number | null = Math.PI / 2; private phi: number | null = Math.PI / 2; @@ -81,6 +82,7 @@ export class CameraManager { this.minDistance, Math.min(this.maxDistance, this.targetDistance), ); + this.desiredDistance = this.targetDistance; } public setTarget(target: Vector3): void { @@ -115,6 +117,8 @@ export class CameraManager { if (minimumDistance !== null && minimumDistance <= cameraToPlayerDistance) { this.targetDistance = cameraToPlayerDistance - minimumDistance; this.distance = this.targetDistance; + } else { + this.targetDistance += (this.desiredDistance - this.targetDistance) * this.dampingFactor * 4; } } diff --git a/packages/3d-web-client-core/src/character/CharacterManager.ts b/packages/3d-web-client-core/src/character/CharacterManager.ts index 9fc3379f..6d90910e 100644 --- a/packages/3d-web-client-core/src/character/CharacterManager.ts +++ b/packages/3d-web-client-core/src/character/CharacterManager.ts @@ -182,7 +182,7 @@ export class CharacterManager { this.character.update(this.timeManager.time); if (this.character.model?.mesh) { - this.cameraOffsetTarget = this.cameraManager.targetDistance <= 0.4 ? 0.6 : 0; + this.cameraOffsetTarget = this.cameraManager.targetDistance <= 0.4 ? 0.13 : 0; this.cameraOffset += ease(this.cameraOffsetTarget, this.cameraOffset, 0.1); const targetOffset = new Vector3(0, 1.3, this.cameraOffset); targetOffset.applyQuaternion(this.character.model.mesh.quaternion);