繁体   English   中英

RealityKit - 在 Xcode 13 中播放 USDZ 文件中的动画

[英]RealityKit – Playing animation from USDZ file in Xcode 13

我正在尝试从 usdz 文件播放动画。 所以我得到了一个 .dae 文件和一个 .scn 文件,两者都是一样的。 对于 RealityKit,他们只接受 .usdz 文件。 所以我使用了 Xcode 的导出器并将它们都导出为 .usdz 格式。 但是动画不会转移。 我还尝试复制 .scn 文件的场景图并将其粘贴到 .usdz 文件中,当我按下 Xcode 中查看器底部中心的播放按钮时。 我可以看到动画播放。

然而这是错误的,因为 .usdz 文件不能被编辑。 所以它不保存。 因此,当我在 Xcode 上运行时,它不会在 ARview 中播放。 这是我播放动画的代码。 我试过查看堆栈溢出和苹果开发者论坛的一堆帖子。

bird = try! Entity.load(named: "plane")
bird.name = "bird"
resultAnchor.addChild(bird)
            
arView.scene.subscribe(to: SceneEvents.AnchoredStateChanged.self) { [self] (event) in
    if resultAnchor.isActive {
        for entity in resultAnchor.children {
            for animation in entity.availableAnimations {
                entity.playAnimation(animation.repeat())
            }
        }
    }
}.store(in: &birdAnimations) // Remember to store the cancellable!

我在帖子中找到了代码的结构

另外我想重要的是要注意我在网上找到了一个带有动画的 .usdz 文件。 当我在finder中的文件上右键单击-> Quicklook时,快速查看能够播放它。 但是当我再次尝试在 Xcode 上播放动画时,它不会播放。

如果您有任何问题,需要我正在做的事情的清晰度或屏幕录像,只需询问即可。

要播放动画,请使用DidAddEntity结构而不是AnchoredStateChanged

import UIKit
import RealityKit
import Combine

class ViewController: UIViewController {
    
    @IBOutlet var arView: ARView!
    var subscriptions: [AnyCancellable] = []
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let model = try! Entity.load(named: "drummer.usdz")
        let anchor = AnchorEntity()
        anchor.addChild(model)
        arView.scene.anchors.append(anchor)
        
        arView.scene.subscribe(to: SceneEvents.DidAddEntity.self) { _ in
            if anchor.isActive {
                for entity in anchor.children {
                    for animation in entity.availableAnimations {
                        entity.playAnimation(animation.repeat())
                    }
                }
            }
        }.store(in: &subscriptions)
    }
}

我的问题不在于我的代码。 这是我将 .blend/.dae 文件转换为 .usdz 的方式。

我首先在搅拌机和 Maya 中将其导出为 .glb(两者都适用)。 然后使用Apple 的 Reality Converter将其导出为 .usdz。 能够正确播放动画。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM