好的,像其他人一样,我在ARKit/世界空间中拖动/翻译SCNNode时遇到了困难。我查看了Dragging SCNNode in ARKit Using SceneKit和所有流行的问题,以及来自苹果的代码https://github.com/gao0122/ARKit-Example-by-Apple/blob/master/ARKitExample/VirtualObject.swift
我试图尽可能简化,并只是做了我在普通场景工具包游戏中所做的事情 - http://dayoftheindie.com/tutorials/3d-games-graphics/t-scenekit-3d-picking-dragging/
我可以轻松获取被点击的对象并存储当前手指位置:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
guard let touch = touches.first else { return }
let results = gameView.hitTest(touch.location(in: gameView), types: [ARHitTestResult.ResultType.featurePoint])
//TAP Test
let hits = gameView.hitTest(touch.location(in: gameView), options: nil)
currentTapPos = getARPos(hitFeature: hitFeature) //TAP POSITION
if let tappedNode = hits.first?.node {
我的问题是,在更新时这样做没有动画效果。对象只会出现在我点击的位置,整体来说不起作用。
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
guard let touch = touches.first else { return }
let results = gameView.hitTest(touch.location(in: gameView), types: [ARHitTestResult.ResultType.featurePoint])
guard let hitFeature = results.last else { return }
testNode.position = currentTapPos
我使用以下函数将其转换为SCNVector3:
func getARPos(hitFeature: ARHitTestResult)->SCNVector3
{
let hitTransform = SCNMatrix4.init(hitFeature.worldTransform)
let hitPosition = SCNVector3Make(hitTransform.m41,
hitTransform.m42,
hitTransform.m43)
return hitPosition
}
我已经尝试过:
-使用向量进行翻译 -滑动手势(这会影响其他功能) -SCNAction.moveTo
我该怎么办?出了什么问题?
SCNAction
有什么问题吗?我使用了平移手势,但我使用了SCNAction
进行平滑转换。 - Alok Subedi