注意节点位置何时进入场景工具包中的某个边界框?

时间:2017-12-20 19:29:56

标签: ios swift scenekit arkit

当一个节点(例如一个被抛出的球)进入SceneKit / ARKit中的某个边界框(例如一个篮子)时,有没有办法触发一个功能?如果没有,你会如何实现这个问题?

2 个答案:

答案 0 :(得分:1)

我可能接近这个的方式。获得篮球箍3D dae模型后。

https://3dwarehouse.sketchup.com/model/fa42320b3def2c6b4741187cebbc52b3/Basketball-Hoop

我首先要为不同的元素设置physicsShapes ....背板,杆和杆;戒指/箍,地板和球。然后我会计算出圆柱尺寸以适应环内。

使用:

let cylinder = SCNCylinder(radius: 1.0, height: 0.1)

这成为了箍的物理体。

hoopNode.physicsBody = SCNPhysicsBody(type: .static, shape: SCNPhysicsShape(geometry:cylinder))

然后我会训练球与每个不同的篮球元素/节点的碰撞。

不要忘记使用调试功能

SceneView.debugOptions = .showPhysicsShapes

这将有助于在视觉上调整与物理形状和碰撞的碰撞。确保物理形状准确缩放并处于正确位置。

如何进行设置碰撞已在此前的帖子中得到解答......

how to setup SceneKit collision detection

你可能希望球从篮板,杆和环上反弹,但是如果它击中篮筐的物理形状......你可能想要让球消失并创造一个漂亮的火花/火焰动画或其他东西。然后你可以有一个记录的分数。

github上的这款Arkit游戏将为您提供一个很好的模板来处理所有这些事情,碰撞,动画和得分

https://github.com/farice/ARShooter

答案 1 :(得分:0)

你必须使用球的世界位置和篮子世界位置+边界框来实现它。

使用它的边界框计算篮子的大小:

var (basketBoundingBoxMin, basketBoundingBoxMax) = (basket?.presentation.boundingBox)!
let size = basketBoundingBoxMax - basketBoundingBoxMin

使用此大小和篮子的世界位置来计算:

  • 篮子的最小x,y,z
  • 篮子的最大x,y,z

然后检查球的世界位置是否在篮筐的最小和最大位置。