Swift 在RealityKit中播放USDZ动画

Swift 在RealityKit中播放USDZ动画,swift,animation,augmented-reality,realitykit,Swift,Animation,Augmented Reality,Realitykit,我花了两天时间试图理解如何在我的RealityKit项目中正确播放动画 我遵循了其他人的许多建议,但没有成功。我知道用RealitykitV2我们只能播放usdz文件中的第一个动画,好吗。我正试图在真人秀中直接播放苹果公司推出的第一部动画“toy_robot_vintage.usdz” 这是我的完整代码: func loadModel(named: String, result: ARRaycastResult) { var usdzToLoad: String

我花了两天时间试图理解如何在我的RealityKit项目中正确播放动画

我遵循了其他人的许多建议,但没有成功。我知道用RealitykitV2我们只能播放usdz文件中的第一个动画,好吗。我正试图在真人秀中直接播放苹果公司推出的第一部动画“toy_robot_vintage.usdz”

这是我的完整代码:

func loadModel(named: String, result: ARRaycastResult) {
        
        var usdzToLoad: String = ""
        
        switch named {
        case "ROBOT":
            usdzToLoad = "toy_robot_vintage.usdz"
        default:
            break;
        }
        
        DispatchQueue.main.async {
            let modelToLoad = try! ModelEntity.loadModel(named: usdzToLoad)
            
            switch named {
            case "ROBOT":
                modelToLoad.name = "ROBOT"
            default:
                break;
            }
            
            let anchor = AnchorEntity(plane: .horizontal, classification: .any, minimumBounds: [0.1, 0.1])
                anchor.position.y = 0.01
                anchor.addChild(modelToLoad)
            
            // Create a "Physics" model of the toy in order to add physics mode
            guard let modelEntity = anchor.children.first as? (Entity & HasPhysics)
            else { return }

            self.arView.installGestures([.rotation], for: modelEntity)
            
            modelEntity.generateCollisionShapes(recursive: true)
            modelEntity.physicsBody = PhysicsBodyComponent(shapes: [.generateBox(size: .one)],
                                                           mass: 1.0,
                                                           material: .default,
                                                           mode: .kinematic)

            self.currentEntity = modelEntity
            self.anchorsEntities.append(anchor)
            
            self.arView.scene.addAnchor(anchor)
            
//            self.currentEntity!.availableAnimations.forEach { self.currentEntity!.playAnimation($0.repeat()) }
            
            let robotAnimationResource = self.currentEntity?.availableAnimations.first
            
            self.currentEntity!.playAnimation(robotAnimationResource!.repeat(duration: .infinity),
                                             transitionDuration: 1.25,
                                                   startsPaused: false)
        }
当我尝试播放动画时,robotAnimationResource总是为零返回一个致命错误


有什么想法吗?提前感谢您的帮助和支持。

modeleentity.loadModel
更改为
modeleentity.load
,它现在应该有动画了。
这很奇怪,我不知道为什么,但这在过去对我很有效

另外,HasPhysics继承实体,因此为了避免寻找锚点的子对象等,您应该能够用以下内容替换该
guard let modelEntity…
行:

guard let modelEntity = modelToLoad as? HasPhysics else { return }

编辑:

我刚刚在操场上运行了这个,动画运行良好:

导入PlaygroundSupport
导入UIKit
进口商品
让arview=arview(帧:.0,cameraMode:.nonAR,automaticallyConfigureSession:true)
arview.environment.lighting.intensityindex=3
让newAnchor=AnchoreEntity(世界:.0)
让我试试!实体加载(命名为:“玩具机器人”复古)
newAnchor.addChild(newEnt)
arview.scene.addAnchor(newAnchor)
适用于newEnt.availableAnimations中的动画{
播放动画(动画重复(持续时间:无限),转换持续时间:1.25,开始暂停:false)
}
PlaygroundSupport.PlaygroundPage.current.liveView=arview

问题是,以这种方式导入的模型不符合HasPhysics(如果您提到这正是它现在失败的地方,那么这很有用)


将ModelComponent应用到另一个实体类或ModelEntity。

ModelEntity.loadModel
更改为
ModelEntity.load
,现在它应该具有动画。
这很奇怪,我不知道为什么,但这在过去对我很有效

另外,HasPhysics继承实体,因此为了避免寻找锚点的子对象等,您应该能够用以下内容替换该
guard let modelEntity…
行:

guard let modelEntity = modelToLoad as? HasPhysics else { return }

编辑:

我刚刚在操场上运行了这个,动画运行良好:

导入PlaygroundSupport
导入UIKit
进口商品
让arview=arview(帧:.0,cameraMode:.nonAR,automaticallyConfigureSession:true)
arview.environment.lighting.intensityindex=3
让newAnchor=AnchoreEntity(世界:.0)
让我试试!实体加载(命名为:“玩具机器人”复古)
newAnchor.addChild(newEnt)
arview.scene.addAnchor(newAnchor)
适用于newEnt.availableAnimations中的动画{
播放动画(动画重复(持续时间:无限),转换持续时间:1.25,开始暂停:false)
}
PlaygroundSupport.PlaygroundPage.current.liveView=arview

问题是,以这种方式导入的模型不符合HasPhysics(如果您提到这正是它现在失败的地方,那么这很有用)


将ModelComponent应用到另一个实体类或ModelEntity。

Hi@maxfrazer感谢您的回复。我编辑了我的代码:用load函数代替loadModel,我看不到加载的usdz。我的意思是模型没有出现在ar场景中…查看我的代码,我看到我实际上使用了
Entity.load(“filename”)
,因此使用了Entity而不是modeleentity,文件名不带扩展名。看看这是否适用于你不幸的是,同样的问题::-(@andyfedorof如果我知道你是现实IT专家;-)也许你有一个解决方案?谢谢你好@maxfrazer谢谢你的回复。我编辑了我的代码:用load函数代替loadModel,我看不到加载的usdz。我的意思是模型没有出现在ar场景中…查看我的代码,我看到我实际上使用了
Entity.load(“filename”)
,因此使用了Entity而不是modeleentity,文件名不带扩展名。看看这是否适用于你不幸的是,同样的问题::-(@andyfedorof如果我知道你是现实IT专家;-)也许你有一个解决方案?谢谢