如何在realityKit中反转USDZ动画

问题描述 投票:0回答:1

如何反向播放USDZ实体动画? 我尝试将速度设置为负值,就像我在 SceneKit 中所做的那样,以使动画反向播放,但它不起作用。 这是我的代码:

import SwiftUI
import RealityKit

struct ImmersiveView: View {
    @State var entity = Entity()
    @State var openDoor: Bool = true
    
    var body: some View {
        RealityView { content in
            if let mainDoor = try? await Entity(named: "Door.usdz") {
                
                if let frame = mainDoor.findEntity(named: "DoorFrame")
                {

                    frame.position = [0, 0, -8]

                    frame.orientation = simd_quatf(angle: (270 * (.pi / 180)), axis: SIMD3(x: 1, y: 0, z: 0))
                    
                    content.add(frame)
                    
                    entity = frame.findEntity(named: "Door")!
                    
                    entity.components.set(InputTargetComponent(allowedInputTypes: .indirect))
                    
                    entity.components.set(HoverEffectComponent())
                    
                    let entityModel = entity.children[0]
                    
                    entityModel.generateCollisionShapes(recursive: true)
                }
            }
        }
        .gesture(
            SpatialTapGesture()
                .targetedToEntity(entity)
                .onEnded { value in
                    print(value)
                    if openDoor == true
                    {
                        let animController = entity.playAnimation(entity.availableAnimations[0], transitionDuration: 0 , startsPaused: true)

                        animController.speed = 1.0
                        animController.resume()
                        
                        openDoor = false
                    }
                    else
                    {
                        let animController = entity.playAnimation(entity.availableAnimations[0], transitionDuration: 0 , startsPaused: true)
                        
                        animController.speed = -1.0 // it does not work to reverse
                        animController.resume()
                        
                        openDoor = true
                    }
                }
            )
    }
}

门应在第一次单击时打开,这已经发生,并在第二次单击时关闭,这不会发生,因为它不会反向播放动画

如果您想尝试的话,这里还有我的门 USDZ 的链接 在此输入链接描述

swift animation realitykit visionos vision-pro
1个回答
0
投票

在visionOS 1.1中,

AnimationPlaybackController
对象仍然无法播放反向资产动画,就像在iOS RealityKit中一样。目前,我建议使用 Autodesk Maya 等创作工具来创建 USDZ 模型的反向动画。

© www.soinside.com 2019 - 2024. All rights reserved.