如何防止SceneKit动画在加载时立即播放?



我正在从。usdz文件加载3d模型,默认情况下,动画加载完成后立即播放和循环:

let modelURL = Bundle.main.url(forResource: "model", withExtension: "usdz")!
let scene = try! SCNScene(url: modelURL, options: nil)
let view = SCNView(frame: CGRect(x: 0,
y: 0,
width: 500,
height: 500))
view.scene = scene

PlaygroundPage.current.liveView = view

我想阻止它在加载时播放动画。

您需要将带有SCNSceneSource.AnimationImportPolicy键的值传递给SCNScene init(url:options:)初始化器的options参数:

let doNotPlay = SCNSceneSource.AnimationImportPolicy.doNotPlay
let scene = try! SCNScene(url: modelURL, options: nil)
options: [.animationImportPolicy: doNotPlay])

文档中的SCNSceneSource.AnimationImportPolicy选项列表在这里

我在SCN文件中遇到了同样的问题,我发现的唯一解决方案不是停止动画,而是将其速度降低到零,这样它就不会从第1帧移动,并且会像那样冻结,直到你决定在代码中再次播放它。

for key in node.animationKeys where node.animationPlayer(forKey: key) != nil
{
let player = node.animationPlayer(forKey: key)
player?.speed = 0
}

最新更新