让一个球从网(子节点)中掉落并做一个嗖嗖运动? (PhysicsBody/ARKit)
Making a ball fall through a net (childnode) and make a swish movement? (PhysicsBody/ARKit)
想知道如何让篮球落网并做出嗖嗖的动作吗?球上已经有重力,但由于形状的原因,它不会完全掉入网内。我需要以某种方式使球网变得灵活,以允许球(球体)从篮筐顶部进入时通过。球只在下降的 1/3 处停止。我正在 Xcode 上试验 iOS ARKit (SceneKit)。谢谢!
球代码。
let ball = SCNSphere(radius: 0.15)
let material = SCNMaterial()
material.diffuse.contents = UIImage(named: "basketballSkin.png")
ball.materials = [material]
let ballNode = SCNNode(geometry: ball)
ballNode.position = cameraPosition
let physicsShape = SCNPhysicsShape(node: ballNode, options: nil)
let physicsBody = SCNPhysicsBody(type: .dynamic, shape: physicsShape)
ballNode.physicsBody = physicsBody
let forceVector:Float = 6
ballNode.physicsBody?.applyForce(SCNVector3(x: cameraOrientation.x * forceVector,y: cameraOrientation.y * forceVector ,z: cameraOrientation.z * forceVector), asImpulse: true)
sceneView.scene.rootNode.addChildNode(ballNode)
篮网代码,篮板节点除外。
func addBackboard(){
guard let backboardScene = SCNScene(named: "art.scnassets/hoop.scn") else{
return
}
guard let backboardNode = backboardScene.rootNode.childNode(withName: "backboard", recursively: false) else{
return
}
backboardNode.position = SCNVector3(x: 0,y: 0.5,z: -3)
let physicsShape = SCNPhysicsShape(node : backboardNode, options: [SCNPhysicsShape.Option.type: SCNPhysicsShape.ShapeType.concavePolyhedron])
let physicsBody = SCNPhysicsBody(type: .static, shape: physicsShape)
backboardNode.physicsBody = physicsBody
sceneView.scene.rootNode.addChildNode(backboardNode)
currentNode = backboardNode
-路德
两个值得尝试的解决方案。一个非常酷的方法是用 Particle System 创建网络,这不是经典的网络,你可以放置更有创意、复杂和生动的东西,例如。网可以因风而移动,然后因球的撞击而改变
其他解决方案可以创建一个节点序列,代表球经过时网所遭受的不同变化,该序列应该在球接触网内的某个透明节点时开始。
好看,好挑战
想知道如何让篮球落网并做出嗖嗖的动作吗?球上已经有重力,但由于形状的原因,它不会完全掉入网内。我需要以某种方式使球网变得灵活,以允许球(球体)从篮筐顶部进入时通过。球只在下降的 1/3 处停止。我正在 Xcode 上试验 iOS ARKit (SceneKit)。谢谢!
球代码。
let ball = SCNSphere(radius: 0.15) let material = SCNMaterial() material.diffuse.contents = UIImage(named: "basketballSkin.png") ball.materials = [material] let ballNode = SCNNode(geometry: ball) ballNode.position = cameraPosition let physicsShape = SCNPhysicsShape(node: ballNode, options: nil) let physicsBody = SCNPhysicsBody(type: .dynamic, shape: physicsShape) ballNode.physicsBody = physicsBody let forceVector:Float = 6 ballNode.physicsBody?.applyForce(SCNVector3(x: cameraOrientation.x * forceVector,y: cameraOrientation.y * forceVector ,z: cameraOrientation.z * forceVector), asImpulse: true) sceneView.scene.rootNode.addChildNode(ballNode)
篮网代码,篮板节点除外。
func addBackboard(){ guard let backboardScene = SCNScene(named: "art.scnassets/hoop.scn") else{ return } guard let backboardNode = backboardScene.rootNode.childNode(withName: "backboard", recursively: false) else{ return } backboardNode.position = SCNVector3(x: 0,y: 0.5,z: -3) let physicsShape = SCNPhysicsShape(node : backboardNode, options: [SCNPhysicsShape.Option.type: SCNPhysicsShape.ShapeType.concavePolyhedron]) let physicsBody = SCNPhysicsBody(type: .static, shape: physicsShape) backboardNode.physicsBody = physicsBody sceneView.scene.rootNode.addChildNode(backboardNode) currentNode = backboardNode
-路德
两个值得尝试的解决方案。一个非常酷的方法是用 Particle System 创建网络,这不是经典的网络,你可以放置更有创意、复杂和生动的东西,例如。网可以因风而移动,然后因球的撞击而改变
其他解决方案可以创建一个节点序列,代表球经过时网所遭受的不同变化,该序列应该在球接触网内的某个透明节点时开始。
好看,好挑战