簡體   English   中英

SceneKit – 平移手勢移動節點太快

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM