Как я могу воспроизвести анимацию COLLADA (.dae) за определенный промежуток времени, используя ARKit в Xcode? - PullRequest
3 голосов
/ 06 июля 2019

Моя анимационная модель имеет общий временной интервал 45 секунд.Я нажимаю на модель и могу играть не с самого начала, а, скажем, с 15-й секунды.

Может кто-нибудь помочь мне, если вы считаете, что это возможно?

РЕДАКТИРОВАТЬ:

Как только я загружаю свою анимациюмодель, SceneKit воспроизводит анимацию.Теперь с ключом в руке я обрезаю анимацию с помощью пользовательского метода, с которым я столкнулся.

Нажав на модель, я перечисляю все родительские / дочерние узлы, чтобы остановить или удалить анимацию изсцена.Все идет нормально.

Проблема появляется, когда я пытаюсь добавить обрезанную анимацию обратно на сцену.На самом деле ничего не происходит, поскольку сцена остается бездействующей без каких-либо действий.

Я что-то здесь не так делаю?

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        let touchLocation = touches.first!.location(in: sceneView)

        // Let's test if a 3D Object was touch
        var hitTestOptions = [SCNHitTestOption: Any]()
        hitTestOptions[SCNHitTestOption.boundingBoxOnly] = true

        let hitResults: [SCNHitTestResult]  = sceneView.hitTest(touchLocation, options: hitTestOptions)

        let animation = animScene?.entryWithIdentifier("myKey", withClass: CAAnimation.self)
        print(" duration is...", animation!.duration)

        let animationNew = subAnimation(of:(animation)!, startFrame: 10, endFrame: 360)
        print("New duration is...", animationNew.duration)

        sceneView.scene.rootNode.enumerateChildNodes { (node, stop) in
            node.removeAllAnimations()
        }

        sceneView.scene.rootNode.enumerateChildNodes { (node, _) in
            node.addAnimation(animationNew, forKey: "myKey")
        }        
   }

1 Ответ

1 голос
/ 06 июля 2019

Предположим, вы можете сделать это, используя move(to:relativeTo:duration:timingFunction:) метод платформы RealityKit.Но я еще не использовал его.

@discardableResult func move(to target: Transform, 
            relativeTo referenceEntity: Entity?, 
                              duration: TimeInterval, 
                        timingFunction: AnimationTimingFunction) -> AnimationPlaybackController

Этот метод помогает вам переместить объект в течение определенного периода времени в новое место, заданное преобразованием.Но вы можете использовать его в macOS15 / iOS13 и выше и в Xcode 11.

И я думаю, что лучше использовать .usdz, чем .dae формат файла.

...