如何在放置在平面上时对ModelRenderable进行动画处理?

How to animate the ModelRenderable at the time of placing on the plane?

我正在尝试在放置 3D 对象(在我的例子中是 .sfb)时播放动画(如掉落或弹跳),但我不知道该怎么做。

我曾尝试使用 ValueAnimator,它可以很好地更改其颜色值,但这不是我想要的。

val alphaAnimator = ValueAnimator.ofFloat(0.0f, 1.0f, 0.0f)
        alphaAnimator.addUpdateListener { animation ->
            val animatedAlpha = animation.animatedValue as Float
            modelRenderable.material.setFloat4(
                MaterialFactory.MATERIAL_COLOR,
                Color(0.0f, 0.0f, 1.0f * animatedAlpha, animatedAlpha)
            )
        }
        alphaAnimator.repeatCount = ValueAnimator.INFINITE
        alphaAnimator.duration = 1000
        alphaAnimator.start()

val animatorSet = AnimatorSet()
        animatorSet.playSequentially(
            ObjectAnimator.ofFloat(modelRenderable, "translationY", 0.0f)
            ObjectAnimator.ofFloat(modelRenderable, "translationY", 1.5f)
            ObjectAnimator.ofFloat(modelRenderable, "translationY", 0.0f)
        )
        animatorSet.duration = 600
        animatorSet.start()

但这给我一个错误 "Could not find property setter method setTranslationY on com.google.ar.sceneform.rendering.ModelRenderable"。

您应该为附加可渲染对象的节点而不是模型本身设置动画。该节点有一个 setLocalPosition(Vector3) 方法,您可以将其用于 ObjectAnimator。因此,例如,要为模型的位置设置动画,您应该这样做:

ObjectAnimator nodeAnimator = ObjectAnimator.ofObject(
                yourNode, 
                "localPosition", 
                new Vector3Evaluator(), 
                Vector3.zero(), new Vector3(0f, 1f, 0f));

然后您可以设置持续时间、重复次数、模式等。您还可以在动画上缩放和旋转模型。