Android Studio中AR场景下sfb模型无法旋转的问题排查建议
排查AR模型无法自动旋转的问题
我帮你梳理下代码里的几个关键问题,调整后应该就能让球体正常自转了:
1. RotatingNode未绑定动画目标与启动逻辑
你写了createAnimation()方法,但既没指定动画要控制哪个节点,也没启动动画。首先你的RotatingNode得继承Sceneform的Node类,然后在内部完成动画的绑定与启动:
private class RotatingNode extends Node { private ObjectAnimator rotationAnim; public RotatingNode() { rotationAnim = createAnimation(); rotationAnim.start(); // 启动自转动画 } private ObjectAnimator createAnimation(){ Quaternion orientation1 = Quaternion.axisAngle(new Vector3(0.0f, 1.0f, 0.0f), 0); Quaternion orientation2 = Quaternion.axisAngle(new Vector3(0.0f, 1.0f, 0.0f), 120); Quaternion orientation3 = Quaternion.axisAngle(new Vector3(0.0f, 1.0f, 0.0f), 240); Quaternion orientation4 = Quaternion.axisAngle(new Vector3(0.0f, 1.0f, 0.0f), 360); ObjectAnimator orbitAnimation = new ObjectAnimator(); orbitAnimation.setObjectValues(orientation1, orientation2, orientation3, orientation4); orbitAnimation.setPropertyName("localRotation"); orbitAnimation.setEvaluator(new QuaternionEvaluator()); orbitAnimation.setRepeatCount(ObjectAnimator.INFINITE); orbitAnimation.setRepeatMode(ObjectAnimator.RESTART); orbitAnimation.setInterpolator(new LinearInterpolator()); orbitAnimation.setAutoCancel(true); orbitAnimation.setTarget(this); // 关键:指定动画控制当前节点 orbitAnimation.setDuration(10000); // 新增:设置旋转时长(10秒转一圈,可按需调整) return orbitAnimation; } }
2. 节点层级逻辑错误,TransformableNode未生效
你创建了TransformableNode但没把它加入场景节点树,等于白创建了。如果需要支持拖拽、缩放这些交互,应该把旋转节点挂在可变换节点下,层级关系要理顺:
private void addModelToScene(Anchor anchor, ModelRenderable modelRenderable) { AnchorNode anchorNode = new AnchorNode(anchor); TransformableNode transformableNode = new TransformableNode(arFragment.getTransformationSystem()); RotatingNode rotatingNode = new RotatingNode(); // 把锚点节点加入场景 anchorNode.setParent(arFragment.getArSceneView().getScene()); // 可变换节点挂在锚点节点下 transformableNode.setParent(anchorNode); // 旋转节点挂在可变换节点下,这样旋转的同时还能交互 rotatingNode.setParent(transformableNode); rotatingNode.setRenderable(modelRenderable); // 选中可变换节点启用交互 transformableNode.select(); }
额外验证点
- 先在Sceneform的预览窗口检查你的
sfb模型是否正常,排除模型本身的问题; - 确保
arFragment完全初始化完成后再调用addModelToScene,避免节点初始化时机错误。
内容的提问来源于stack exchange,提问作者SOFIYA
相关产品推荐
相关产品推荐

