Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Animation 设置gltf克隆对象从一个位置到另一个位置的动画(行走)_Animation_Three.js_Gltf - Fatal编程技术网

Animation 设置gltf克隆对象从一个位置到另一个位置的动画(行走)

Animation 设置gltf克隆对象从一个位置到另一个位置的动画(行走),animation,three.js,gltf,Animation,Three.js,Gltf,我正在做一个项目,我导入了一个有动画的gltf类人机器人。我正在创建导入模型的克隆以显示在场景中,而不是每次都创建一个新的克隆 我有加载模型的行走和空闲动画。我如何使克隆人的动画看起来像是从一个位置走到另一个位置。例如,如果克隆模型在时间=1s时处于位置(10,20,0),并且在时间=2s时将处于位置(13,20,0),则我希望显示模型正在两个位置之间行走。我阅读了新的动画系统文档并进行了大量搜索,但没有任何帮助 谢谢你的帮助 注:由于限制,我无法共享项目中的代码。您可以通过减去两个向量,然后对

我正在做一个项目,我导入了一个有动画的gltf类人机器人。我正在创建导入模型的克隆以显示在场景中,而不是每次都创建一个新的克隆

我有加载模型的行走和空闲动画。我如何使克隆人的动画看起来像是从一个位置走到另一个位置。例如,如果克隆模型在时间=1s时处于位置(10,20,0),并且在时间=2s时将处于位置(13,20,0),则我希望显示模型正在两个位置之间行走。我阅读了新的动画系统文档并进行了大量搜索,但没有任何帮助

谢谢你的帮助


注:由于限制,我无法共享项目中的代码。

您可以通过减去两个向量,然后对其进行规格化来获得方向

let direction = new THREE.Vector3().subVectors(destination.position, object.position).normalize();
然后在渲染函数中更新该方向上每个帧上的对象位置。速度变量值由您决定(默认值为1)

您需要一个布尔值,如
isMoving
或对象之间的距离,才能知道何时开始和停止

object.position.distanceTo( destination.position );


至于动画,我认为您只需要在开始时调用animation.play(),在到达目的地时调用animation.stop()。

您可以通过减去两个向量,然后对其进行规格化来获得方向

let direction = new THREE.Vector3().subVectors(destination.position, object.position).normalize();
然后在渲染函数中更新该方向上每个帧上的对象位置。速度变量值由您决定(默认值为1)

您需要一个布尔值,如
isMoving
或对象之间的距离,才能知道何时开始和停止

object.position.distanceTo( destination.position );


至于动画,我想您只需要在开始时调用animation.play(),在到达目的地时调用animation.stop()。

我在使用animation.play()时遇到问题。它对克隆人没有任何作用。但是,如果我为每个用户创建一个新模型,我可以看到动画播放。你有什么建议吗?没有代码示例我做不了什么。您是否为每个克隆创建新的混合器?请注意,从中克隆蒙皮网格当前需要额外的工作。我正在执行类似于以下代码的操作:var model、clip、clonedModel;函数loadGLTFModel(){var loader=new THREE.GKTFLoader();loader.load('model.glb',函数(loademodel){model=loadedModel.scene;clip=model.animations[0];});}函数createClone(model){clonedModel=model.clone();clonedModel.mixer=new THREE.AnimationMixer(clonedModel);mixer.push(clonedModel.push)(clonedModel);var action=clonedModel.mixer.clipAction(clip);action.play();scene.add(clonedModel);}谢谢@DonMcCurdy。我将尝试这种方法。我在动画方面遇到问题。play()。它对克隆人没有任何作用。但是,如果我为每个用户创建一个新模型,我可以看到动画播放。你有什么建议吗?没有代码示例我做不了什么。您是否为每个克隆创建新的混合器?请注意,从中克隆蒙皮网格当前需要额外的工作。我正在执行类似于以下代码的操作:var model、clip、clonedModel;函数loadGLTFModel(){var loader=new THREE.GKTFLoader();loader.load('model.glb',函数(loademodel){model=loadedModel.scene;clip=model.animations[0];});}函数createClone(model){clonedModel=model.clone();clonedModel.mixer=new THREE.AnimationMixer(clonedModel);mixer.push(clonedModel.push)(clonedModel);var action=clonedModel.mixer.clipAction(clip);action.play();scene.add(clonedModel);}谢谢@DonMcCurdy。我会尝试那种方法。你是如何克隆模型的?我试过使用三个.SkeletonUtils.clone(),但似乎不起作用。你是如何克隆模型的?我尝试过使用三个.SkeletonUtils.clone(),但似乎不起作用。