Swift 如何设置SceneKit碰撞检测
您好,我仔细阅读了文档,不知道如何在场景工具包中设置碰撞检测。有人能举个例子吗。 请帮帮我,我非常想弄清楚这件事。 谢谢大家! 编辑: 你好,非常感谢,很抱歉我忘了提到我的项目在swift中。没什么大不了的,我大部分时间都能翻译自己 当对象相互碰撞和反弹时,我的位掩码工作正常。然而,我似乎无法使该功能正常工作Swift 如何设置SceneKit碰撞检测,swift,scenekit,Swift,Scenekit,您好,我仔细阅读了文档,不知道如何在场景工具包中设置碰撞检测。有人能举个例子吗。 请帮帮我,我非常想弄清楚这件事。 谢谢大家! 编辑: 你好,非常感谢,很抱歉我忘了提到我的项目在swift中。没什么大不了的,我大部分时间都能翻译自己 当对象相互碰撞和反弹时,我的位掩码工作正常。然而,我似乎无法使该功能正常工作 func physicsWorld(world: SCNPhysicsWorld, didBeginContact contact: SCNPhysicsContact){ let
func physicsWorld(world: SCNPhysicsWorld, didBeginContact contact: SCNPhysicsContact){
let contactMask = contact.nodeA.physicsBody!.categoryBitMask | contact.nodeB.physicsBody!.categoryBitMask
if (contactMask == (CollisionBallCategory | CollisionTerminatorCategory)) {
println("Collided")
}
}
看着它,我似乎需要以某种方式将场景物理世界委派给该方法。我不知道该怎么做。SceneKit中碰撞检测的主要内容:
- 它基于位掩码,它们一起构成一个表李>
- 联系人代理是您对冲突的响应方式
| Missile | Rocket | Asteroid
--------------------------------------
Missile | No | Yes | Yes
Rocket | No | Yes | Yes
Asteroid | No | No | Yes
然后可以将表的标题转换为一组类别常量,以便在代码中使用
typedef NS_选项(NSUInteger、CollisionCategory){
CollisionCategoryMissile=1我在编辑后为您的问题添加了一个语言标签-既然Cocoa(Touch)有两种主要语言,那么澄清您要问的是哪种语言总是很好的。说到哪种,您从未提到过哪种平台您的目标是任何一个-SceneKit在iOS和OS X上都运行,但一般来说,SceneKit的任何特定内容对这两个平台都是通用的。一旦您检查了文档和/或我的更新答案,以确保您的冲突代理设置正确,请在physicsWorld:didBeginContact:
内粘贴一个println
,这样您就可以I’我知道您的问题是方法没有被调用,还是您的contactMask
逻辑工作不正常。在“响应冲突”部分添加了一些内容,以便更直接地解决编辑问题中的问题。将代码保留在ObjC中(至少现在)-如果你很乐意阅读,我不必重写和重新测试它。:)事实上,考虑到Swift的当前状态,可以说最好使用NS_OPTIONS
在C中定义冲突类别枚举,然后将其导入Swift-这会自动获得一个RawOptionSetType
,您可以应用位操作Tor,如果您已经用Swift声明了枚举,您必须自己添加它们。(然后用Swift执行其余代码。)非常感谢最后两行代码是我无法理解的,谢谢!嗨!我在Swift 4中似乎再也找不到CollisionCategory了。还有其他方法可以做到这一点吗?仔细阅读答案。CollisionCategory
不是API,它是您自己定义的类型。