gpt4 book ai didi

swift - Scenekit - 未检测到碰撞

转载 作者:行者123 更新时间:2023-11-30 10:49:52 27 4
gpt4 key购买 nike

我创建了一个球并希望它与另一个球体碰撞。但没有成功。

enum ColliderType: Int {
case ball = 1
case food = 2
}

创建一个球和一个食物对象

 let ballNode: SCNNode!

override func viewDidLoad() {

.......

let ball = SCNSphere(radius: 1.0)
ball.materials.first?.diffuse.contents = UIColor.red
ballNode = SCNNode(geometry: ball)
ballNode.name = "ball"
ballNode.position = SCNVecter3(10, 1, 10)
ballNode.physicsBody = SCNPhysicsBody(type: .kinematic, shape:
SCNPhysicsShape(geometry: SCNSphere(radius: 1.0), options: nil))
ballNode.physicsBody?.categoryBitMask = ColliderType.ball.rawValue
ballNode.physicsBody?.contactTestBitMask = ColliderType.food.rawValue
ballNode.physicsBody?.collisionBitMask = ColliderType.food.rawValue
scnScene.rootNode.addChildNode(ballNode)


let food = SCNSphere(radius: 0.5)
food.materials.first?.diffuse.contents = UIColor.green
let foodNode = SCNNode(geometry: food)
foodNode.position = SCNVector3(0, 0.5, 0)
foodNode.name = "food"
foodNode.physicsBody = SCNPhysicsBody(type: .static, shape:
SCNPhysicsShape(geometry: SCNSphere(radius: 0.5), options: nil))
foodNode.physicsBody?.categoryBitMask = ColliderType.food.rawValue
foodNode.physicsBody?.collisionBitMask = ColliderType.ball.rawValue
foodNode.physicsBody?.contactTestBitMask = ColliderType.ball.rawValue
scnScene.rootNode.addChildNode(foodNode)

}

这是碰撞代码:

func physicsWorld(_ world: SCNPhysicsWorld, didBegin contact: SCNPhysicsContact) {

var contactNode: SCNNode!

if contact.nodeA.name == "ball" {
contactNode = contact.nodeB
} else {
contactNode = contact.nodeA
}

if contactNode.physicsBody?.categoryBitMask == ColliderType.food.rawValue {
print("aaaa")
}

如果我使用场景编辑器创建食物对象,它就可以工作。我不知道我的代码有什么问题。

最佳答案

您对一个节点使用 contactTestBitMask,对另一个节点使用 collisionBitMaskSCNPhysicsContactcontactTestBitMask 管理。

此外,我没有看到 physicalsBody 是否分配给球节点。

关于swift - Scenekit - 未检测到碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54829254/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com