停止/播放 usdz这是上个教程的进阶

第一部分

第二部分
代码1


import SwiftUI
@main
struct MyApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

代码2


import SwiftUI
import RealityKit
struct ContentView: View {
    @State var isPaused = true
    var body: some View {
        ZStack {
            ARViewContainer(isPaused: $isPaused)
                .ignoresSafeArea()
            VStack {
                Spacer()
                Button(isPaused ? "Stop" : "Play") {
                    self.isPaused.toggle()
                }
                .padding()
                .background(.red)
                .cornerRadius(10, antialiased: true)
                .padding()
            }
        }
    }
}
struct ARViewContainer: UIViewRepresentable {
    @Binding var isPaused: Bool
    @State var someAnimation: [AnimationPlaybackController] = []
    func makeUIView(context: Context) -> ARView {
        let arView = ARView(frame: .zero)
        let anchorEntity = AnchorEntity(plane: .horizontal)
         let modelEntity = try! ModelEntity.load(named: "toy_biplane_idle") 
        anchorEntity.addChild(modelEntity)
        arView.scene.addAnchor(anchorEntity)
        return arView
    }
    func updateUIView(_ uiView: ARView, context: Context) {
        if isPaused {
            uiView.scene.anchors[0].children[0].stopAllAnimations(recursive: true)
        } else {
            let modelEntity = try! ModelEntity.load(named: "toy_biplane_idle") 
            let someAnimation = modelEntity.availableAnimations[0].repeat(count: .max)//删除.repeat(count: .max);改 .max为3
            uiView.scene.anchors[0].children[0].playAnimation(someAnimation, transitionDuration: 1.0, startsPaused: false)
        }
    }
}
4 个赞

想请教一下,如果我的模型有一个长达3秒的动画,假设是一个人物模型,第1秒是跑,第2秒是跳,第3秒是下蹲。我想要实现分割动画,不同的条件触发三个不同的func,对应三个动作,这个是怎么实现的呢?

将一个动画切割为多个动画,有时间我研究研究。

如果想尝试:可以用RealityKit的sliceAnimations试试。

2 个赞