[英]SceneKit – pan gesture is moving node too quickly
我目前正在嘗試使用平移手勢識別器來移動 SceneKit 中的節點。 我只是沿着X
軸移動它,但是我的手勢使對象移動得更遠/更快,即使只使用小手勢也是如此。 我不是 100% 確定我在這里做錯了什么,但這是我的手勢識別器的代碼:
@objc func handlePan(_ pan:UIPanGestureRecognizer) {
if pan.state == .changed {
let translation = pan.translation(in: pan.view!)
node!.position = SCNVector3(x:node!.position.x + Float(translation.x), y:node!.position.y, z:node!.position.z)
pan.setTranslation(CGPoint.zero, in: pan.view!)
}
}
正如我所說,物體正在移動,它只是以令人難以置信的速度和距離發射。 效果幾乎是累積的。
我認為如果我沒有重置平移手勢識別器的翻譯,情況可能就是這種情況,但我在這里這樣做
pan.setTranslation(CGPoint.zero, in: pan.view!)
我實際上是在嘗試在 ARKit 場景中完成這項工作,但我已經刪除了所有這些,只是為了讓節點正確移動,但我仍然遇到問題。
平底鍋被添加到 ARSCNView 而我試圖操作的節點作為子節點添加到ARSCNView.scene.rootNode
所以我想知道是否是這些的位置/坐標有問題。
let translation = pan.translation(in: pan.view!)
此代碼返回 CGPoint 與視圖中以points
為單位的手勢位置(可能是像素)。 但是 SCNNode 位置(在現實世界中)是以米為單位的位置。 因此,當您在 SCNVector 中為X
位置添加一個點時,實際上是為此添加了一個米。
要將屏幕點轉換為 3D 世界坐標,請使用ARSCNView
unprojectPoint
方法。 您可能需要保存以前的手勢位置才能找到位置變化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.