物理计算scenekit后获取节点位置

Posted

技术标签:

【中文标题】物理计算scenekit后获取节点位置【英文标题】:get node position after physics calculation scenekit 【发布时间】:2018-02-07 05:12:28 【问题描述】:

在一个场景包应用程序上工作,我有 2 个盒子可以互相射击以获得分数。这是第一个盒子需要射击的位置的计算:

shot1 = SCNNode()
shot1.geometry = SCNSphere(radius: 0.5)
shot1.physicsBody = SCNPhysicsBody.dynamic()
shot1.position = SCNVector3Make
(boxNode1.position.x, 
 boxNode1.position.y + 1, 
 boxNode1.position.z - 1)
scnScene.rootNode.addChildNode(shot1)

对于第二个盒子:

shot2 = SCNNode()
shot2.geometry = SCNSphere(radius: 0.5)
shot2.physicsBody = SCNPhysicsBody.dynamic()
shot2.position = SCNVector3Make
(boxNode2.position.x, 
 boxNode2.position.y + 1, 
 boxNode2.position.z + 1)
scnScene.rootNode.addChileNode(shot2)

每一次射击都恰到好处,然后被抛到另一个盒子上,并在其物理体上施加力作为脉冲。

对于触摸实现,我使用 touchesBegan 来搜索触摸,然后如果触摸具有 hitResult,我会按照上述说明进行射击。

问题发生在: 如果例如shot1击中boxNode2,则boxNode2会像我预期的那样向后移动,这次如果我用boxNode2射击,shot2的起始位置不像我预期的那样位于boxNode2的新位置,并且开始在开始的地方开火!

那么我怎样才能从 boxNodes 的新位置射击呢?

【问题讨论】:

【参考方案1】:

只需使用presentation:

let realPosition = yourNode.presentation.worldPosition

【讨论】:

谢谢老哥,真的很管用!现在我需要找到一种方法来分析如果击球导致盒子在 y 轴上旋转时改变脉冲角。 谢谢,伙计。这对我帮助很大。

以上是关于物理计算scenekit后获取节点位置的主要内容,如果未能解决你的问题,请参考以下文章

SceneKit 节点的交集

SceneKit 计算具有枢轴的节点的顶点世界坐标

SceneKit:关于定位相机节点的数学问题

如何在 iOS 11 中将 SKVideoNode 添加到 ARKit-SceneKit?

Scenekit:如何获取节点的所有材质?

在 SCNSphere 上获取点击位置 - Swift (SceneKit) / iOS