【发布时间】:2018-06-03 10:23:01
【问题描述】:
当一个节点(例如扔出的球)进入 SceneKit / ARKit 中的某个边界框(例如篮子)时,有没有办法触发功能?如果没有,你将如何实现这个问题?
【问题讨论】:
当一个节点(例如扔出的球)进入 SceneKit / ARKit 中的某个边界框(例如篮子)时,有没有办法触发功能?如果没有,你将如何实现这个问题?
【问题讨论】:
我可能会采用这种方式。获得篮球框3D dae模型后。
https://3dwarehouse.sketchup.com/model/fa42320b3def2c6b4741187cebbc52b3/Basketball-Hoop
我会首先为不同的元素设置物理形状......篮板、杆和环/箍、地板和球。然后我会计算出圆柱体尺寸以适合环内。
使用:
let cylinder = SCNCylinder(radius: 1.0, height: 0.1)
这变成了箍的 physicBody。
hoopNode.physicsBody = SCNPhysicsBody(type: .static, shape: SCNPhysicsShape(geometry:cylinder))
然后,我将锻炼球与每个不同篮球元素/节点的碰撞。
别忘了使用调试功能
SceneView.debugOptions = .showPhysicsShapes
这将有助于直观地调试与物理形状的碰撞并确保物理形状被准确缩放并处于正确的位置。
如何设置冲突已经在之前的帖子中回答过......
how to setup SceneKit collision detection
您可能希望球从篮板、杆和环上反弹,但如果它击中篮筐的物理形状......您可能希望让球消失并创建一个漂亮的火花/火焰动画或其他东西。然后,您也可以拥有一个记录的分数。
github 上的这款 Arkit 游戏将为您提供一个很好的模板来处理所有这些事情、碰撞、动画和评分
【讨论】:
你必须使用球的世界位置和篮子的世界位置+边界框来实现它。
使用它的边界框计算篮子的大小:
var (basketBoundingBoxMin, basketBoundingBoxMax) = (basket?.presentation.boundingBox)!
let size = basketBoundingBoxMax - basketBoundingBoxMin
使用这个尺寸和篮筐的世界位置来计算:
然后检查球的世界位置是否在篮筐的最小和最大位置内。
【讨论】: