在我的ARKit应用程序中,我有一个动画角色(作为T骨模型存储在SCN文件中)。动画来自几个DAE文件,并使用SCNAnimationPlayer
应用于模型,如下所示:
let myAnimation = Animations.configMyAnimationFunction()
myAnimation.stop()
enemyNode.childNodes[2].addAnimationPlayer(myAnimation, forKey: "myKey")
enemyNode.childNodes[2].animationPlayer(forKey: "myKey")?.play()
动画播放完美。
现在,我对动画的几何图形进行“命中测试”:
let currentTouchPoint = touches.first?.location(in: self.sceneView)
let hitTest = sceneView.hitTest(currentTouchPoint!, options: [SCNHitTestOption.categoryBitMask: NodeCategory.catEnemy.rawValue, SCNHitTestOption.searchMode: SCNHitTestSearchMode.any.rawValue as NSNumber])
let hitObject = hitTest.first?.node // let that stores the hitTest
if hitObject != nil {
// code...
let hitLocation = hitTest.first?.worldCoordinates
// code...
}
我想使用“ worldCoordinates”的结果。但是似乎结果总是包含静态T骨模型的坐标,而不是动画运行时的位置。
想象一下动画模型正在拍手(作为人形角色)或触地。当我触摸模型手时,Hittest会工作并返回结果,但最终会在错误的坐标处进行。
worldCoordinates
上的Apple Docs像这样:“场景的世界坐标系中几何图形和搜索射线之间的交点。” 我还尝试了{{1} },但成功率更低。
如何在动画制作模型期间确定几何体上当前触摸位置的真实坐标?