Swift 在RealityKit中播放USDZ动画
我花了两天时间试图理解如何在我的RealityKit项目中正确播放动画 我遵循了其他人的许多建议,但没有成功。我知道用RealitykitV2我们只能播放usdz文件中的第一个动画,好吗。我正试图在真人秀中直接播放苹果公司推出的第一部动画“toy_robot_vintage.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
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专家;-)也许你有一个解决方案?谢谢