diff --git a/type_templates/vrm.js b/type_templates/vrm.js index 9597dd1..4a92fb2 100644 --- a/type_templates/vrm.js +++ b/type_templates/vrm.js @@ -1,6 +1,6 @@ import * as THREE from 'three'; import metaversefile from 'metaversefile'; -const {useApp, usePhysics, useAvatarRenderer, useCamera, useCleanup, useActivate, useLocalPlayer} = metaversefile; +const {useApp, usePhysics, useAvatarRenderer, useCamera, useCleanup, useFrame, useActivate, useLocalPlayer} = metaversefile; const localVector = new THREE.Vector3(); const localVector2 = new THREE.Vector3(); @@ -28,6 +28,7 @@ export default e => { let avatarRenderer = null; let physicsIds = []; let activateCb = null; + let frameCb = null; e.waitUntil((async () => { const arrayBuffer = await _fetchArrayBuffer(srcUrl); @@ -41,7 +42,6 @@ export default e => { app.avatarRenderer = avatarRenderer; await avatarRenderer.waitForLoad(); app.add(avatarRenderer.scene); - avatarRenderer.scene.updateMatrixWorld(); // globalThis.app = app; // globalThis.avatarRenderer = avatarRenderer; @@ -90,12 +90,23 @@ export default e => { const localPlayer = useLocalPlayer(); localPlayer.setAvatarApp(app); }; + + const {height} = avatarRenderer.getAvatarSize(); + frameCb = ({timestamp, timeDiff}) => { + if (!avatarRenderer.isControlled) { + avatarRenderer.updateObject(timestamp, timeDiff, height); + } + }; })()); useActivate(() => { activateCb && activateCb(); }); + useFrame((e) => { + frameCb && frameCb(e); + }); + // controlled tracking const _setPhysicsEnabled = enabled => { if (enabled) {