我正在为我的问题寻找解决方案: 我已经使用Xcode中的动作编辑器将动画定义为SCNAction。现在我想用滑块控制它。因此,基本上操纵滑块会在动画中显示特定的时间/帧。
现在,我可以暂停/播放动画或将其重置为开头。我使用Swift代码从动作编辑器中解决了SCNAction。
据我研究,没有可能 将SCNAction立即设置为特定时间并在那里停止。那会有用。
如果SCNActions无法实现这一目标,我也会对其他尝试感兴趣。这可能是根本无法实现的。谢谢。
答案 0 :(得分:0)
我找到了一个解决方案:我从.dae文件中加载了CAAnimation
(对于这个看起来:https://stackoverflow.com/a/24924702/9625548,位过时但仍然可用)。
使用SCNAnimationPlayer
,我可以使用密钥解决CAAnimation
问题。有以下几点
代码我可以用UISlider
:
let moment: TimeInterval = TimeInterval(self.animationTimeSlider.value)
guard let animationPlayer: SCNAnimationPlayer = node.animationPlayer(forKey: key) else{
return
}
animationPlayer.animation.timeOffset = moment
animationPlayer.play()
animationPlayer.speed = 0.0
基本上,我读了拇指并将其转换为TimerInterval
。如果找不到给定密钥的SCNAnimationPlayer
,我正在寻找SCNAnimationPlayer
并中止。然后我将.timeOffset
设置为我想要显示的那一刻。使用play()
,动画从头开始+ .timeOffset
。最后,将.speed
设置为零。动画没有运行,但显示了时刻。
注意:如果您让动画运行并以这种方式操作它,则必须重置它。否则就会搞砸了。您可以使用布尔值来捕获该情况,如果您让动画正常运行,则会保存。然后你知道在使用滑块进行操作之前必须重置它。例如:
node.removeAllAnimations()
node.addAnimation(animation, forKey: key)
self.sceneView.scene.rootNode.animationPlayer(forKey: key)?.paused = true