我在使用 RealityKit 制作角色动画时遇到问题。我在 Blender 中创建了一个文件,其中包含已装备的角色、剑和盾牌。剑和盾牌的骨骼与角色的手相连,因此它们可以跟随角色的动画。当我在 Blender 中运行动画并在 Mac 上预览导出的 USDZ 文件时,我可以看到剑和盾牌附着在手上,并且动画效果很好。但是当我在 RealityKit 中添加 USDZ 模型并播放动画时,只有角色在动画,剑和盾根本没有移动。
这是我用来为角色设置动画的代码:
private func loadAnimations() {
let unifiedAnimations = children[0].availableAnimations.first!.definition
let animationResource = try! AnimationResource.generate(with: unifiedAnimations)
self.children[0].playAnimation(
animationResource.repeat()
)
}
这里是演示 Xcode 项目、Blender 文件和视频的链接: https://www.dropbox.com/scl/fi/ypq2iwxc5f9dwzjggsvin/AppleTest.zip?rlkey=wiag3rg44urhjdh2wal8cdx2u&st=vbpf7x11&dl=0
重现步骤 我创建了一个演示项目,在水平表面上显示角色,并且动画开始播放。
谢谢
我试图找到一种方法来获取骨骼实时位置,以便我可以与武器同步,但无法做到。
还尝试使用不同的技术从搅拌机导出,但没有再次成功。
在 RealityKit 中运行
.usdz
动画的代码可以简单得多:
这是iOS 18.2版本。
import SwiftUI
import RealityKit
struct ContentView : View {
var body: some View {
RealityView { rvc in
let knight = try! await Entity(named: "Knight")
let animatedKnight = animated(knight)
rvc.add(animatedKnight)
}
.ignoresSafeArea()
.background(.black)
.realityViewCameraControls(.dolly)
}
func animated(_ knight: Entity) -> Entity {
knight.position = [0.0,-0.7,-2.0]
let resource = knight.availableAnimations[0]
knight.playAnimation(resource.repeat())
return knight
}
}