swift - 如何在 ARKit 中播放特定时间间隔的 DAE 动画?
问题描述
我的动画模型的总时间间隔为 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")
}
}
解决方案
Collada
假设,这是播放包含在文件中的动画的最强大的方法:
import SceneKit
func myAnimation(path: String) -> SCNAnimation? {
let scene = SCNScene(named: path)
var animation: SCNAnimationPlayer?
scene?.rootNode.enumerateChildNodes( { (child, stop) in
if let animationKey = child.animationKeys.first {
animation = child.animationPlayer(forKey: animationKey)
// variable pointee: ObjCBool { get nonmutating set }
stop.pointee = true
}
})
return animation?.animation
}
let node = SCNNode()
let animation = myAnimation(path: "animation.dae")
node.addAnimation(animation!, forKey: "FirstAnimationSet")
推荐阅读
- c++ - 指向 std::vector 对象的指针
- java - 如何让 Java 以编程方式执行 hosts 文件的功能?
- docker - Dockerfile:Python.h:没有这样的文件或目录
- ios - TvOS - UIRequiredDeviceCapabilities 问题
- api - Rest API 资源:为 post 组合但单独获取可以吗?
- object - 如何在 uwp 应用程序中将列表视图项用作按钮?或者如何通过单击 uwp 中的列表视图项来更改文本框的文本?
- algorithm - 分析具有以指数方式扩展而不是恒定量的变量的循环
- java - 获取 InvalidDataAccessApiUsageException:使用 ExampleMatcher 时,来自根 %s 的路径“%s”不得跨越循环属性引用
- reactjs - TypeError:无法读取 ReactJS 中未定义的属性“名称”
- powershell - PowerShell - 为什么这不重命名我的文件?