我试图从usdz文件中播放动画。所以我得到了一个.dae文件和一个.scn文件,这两个文件都是相同的。对于RealityKit,它们只接受.usdz文件。所以我使用了Xcode的导出程序,并将它们都导出为.usdz格式。但是动画不会转移。我还尝试复制.scn文件的场景图,并将其粘贴到.usdz文件中,并在Xcode中按下查看器底部中心的play按钮。我可以看动画片。
但是,这是错误的,因为.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文件。当我正确地点击查找器中的文件时,快速查看就可以播放了。但是,当我尝试在Xcode上播放动画时,它不会播放。
如果你有任何问题,需要清晰或屏幕记录我正在做的只是问。
发布于 2022-05-18 00:24:41
我的问题不是我的密码。这就是我将..blend/..dae文件转换为.usdz的方式。
我第一次导出它作为一个.glb在搅拌机和玛雅(为两者工作)。然后使用苹果的现实转换器将其导出为.usdz。能够正确地播放动画。
发布于 2022-05-16 23:59:52
要播放动画,请使用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)
}
}https://stackoverflow.com/questions/72266212
复制相似问题