为何使用Tween无法改变Three.js场景中对象的位置?
解决Three.js中Tween动画无效的常见坑
嘿,别着急,刚接触Three.js和Tween的时候踩这种坑太正常了!我当初刚学的时候也在这上面卡了快一小时,来帮你捋捋最可能的几个原因:
Tween绑定的对象不对
Three.js物体的位置是存在mesh.position这个Vector3对象里的,如果你直接把整个mesh传给Tween,它没法正确识别x/y/z属性。
❌ 错误写法:new TWEEN.Tween(mesh) .to({ x: 10 }, 1500) .start();✅ 正确写法:
new TWEEN.Tween(mesh.position) .to({ x: 10 }, 1500) .start();一定要确保Tween的目标是包含可读写数值属性的对象,比如
position、scale这些。忘了在渲染循环里更新TWEEN
Tween.js的动画推进完全依赖每一帧调用TWEEN.update(),如果没加这行,动画状态根本不会变化,看起来就像没生效。你的渲染循环应该是这样:function animate() { requestAnimationFrame(animate); TWEEN.update(); // 这行是核心!别漏了 renderer.render(scene, camera); } animate();目标值和初始值无差异
比如你立方体初始x坐标就是5,结果Tween的目标也是x:5,那当然看不到任何变化。先通过console.log(mesh.position.x)确认初始值和目标值是不是真的不一样。变量引用搞混了
比如你场景里添加的是myCube,但Tween操作的是anotherCube,这种低级错误新手很容易犯,检查一下变量名是不是完全一致。
如果还是找不到问题,把你的两段Tween代码贴出来对比一下,肯定能快速定位差异——毕竟一段生效一段不生效,差异点一定在代码细节里!
内容的提问来源于stack exchange,提问作者Nick Malawskey
相关产品推荐
相关产品推荐

