如何在ARCore Sceneform中旋转动画以使节点旋转 [英] How to rotate animate the rotation of a Node in ARCore Sceneform
问题描述
我了解ARCore尚不支持步行等3D动画,但是如何为Node的旋转设置动画?
I understand that 3D animations such as walking are not yet supported in ARCore, but how can I animate the rotation of a Node?
我知道我可以设置LocalRotation或WorldRotation,但是如何使这种动画以流畅的方式连续播放呢?
I know I can set LocalRotation or WorldRotation but how do I make this animated continuously in a smooth fashion?
推荐答案
最简单的方法是使用 Android属性动画.例如,在Sceneform示例太阳能系统"中.看看
The easiest way is to use the Android Property Animation. An example of doing this is in the Sceneform sample "Solar System". Take a look at RotatingNode. This rotates the node around its axis.
首先,它创建一个 ObjectAnimator ,该对象使用LinearInterpolation来设置绕一个圆点4点.
First, it creates an ObjectAnimator that uses LinearInterpolation to set the rotation between 4 points around a circle.
private static ObjectAnimator createAnimator() {
// Node's setLocalRotation method accepts Quaternions as parameters.
// First, set up orientations that will animate a circle.
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);
// Next, give it the localRotation property.
orbitAnimation.setPropertyName("localRotation");
// Use Sceneform's QuaternionEvaluator.
orbitAnimation.setEvaluator(new QuaternionEvaluator());
// Allow orbitAnimation to repeat forever
orbitAnimation.setRepeatCount(ObjectAnimator.INFINITE);
orbitAnimation.setRepeatMode(ObjectAnimator.RESTART);
orbitAnimation.setInterpolator(new LinearInterpolator());
orbitAnimation.setAutoCancel(true);
return orbitAnimation;
}
接下来,它开始动画:
orbitAnimation = createAnimator();
orbitAnimation.setTarget(this);
orbitAnimation.setDuration(getAnimationDuration());
orbitAnimation.start();
这篇关于如何在ARCore Sceneform中旋转动画以使节点旋转的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!