如何在不影响模型旋转的情况下将相机附加到模型上的 bone/vertices? (A-Frame)

How to attach an camera to a bone/vertices on a model without affecting its rotation? (A-Frame)

我想在动画 GTLF 模型的头部安装一个 first-person 相机。我打算移除模型的头部并将颈部合并为一个顶点,以免遮挡相机。我的问题是如何将相机连接到模型的顶点或骨骼?

这类似于: 但我也希望玩家仍然独立于 parent 旋转相机。如何只影响相机的位置?

目前,我有以下代码:

Javascript

AFRAME.registerComponent('character-logic', {
    init: function () {
        var character = document.querySelector('#character')
        var camera = document.querySelector('#camera')
        character.skeleton.bones[2].add(camera)
    }
});

HTML 总结

<a-scene character-logic>
   <a-assets>
      <a-asset-item id="character-gtlf" src="models/character.glb" response-type="arraybuffer"></a-asset-item>
   </a-assets>
   <a-camera id="camera"></a-camera> 
   <a-entity id="character" gltf-model="#character-gtlf" animation-mixer></a-entity>
</a-scene>

但出于某种原因,我不断收到“无法读取 属性 'bone'”。

如果有帮助,我这里还有一个关于 Glitch 的简单代码示例,它在 character.skeleton.bones[2].add(camera) 被注释掉时有效:https://glitch.com/~cam-to-bone

您应该能够使用此方法将相机附加到骨骼:

character.addEventListener('model-loaded', function(event){
    const model = event.detail.model;
    const skinnedMesh = model.getObjectByName('nedKelly001');
    skinnedMesh.skeleton.bones[2].add(camera.object3D);
});

想法是通过名称查询蒙皮网格 nedKelly001。然后您可以安全地访问 skeleton 属性.