boxNodeがfloorNodeと衝突した時にprint出来るようにしたいです。ビットマスクの使い方等を調査し、下記のように書いてみましたが、表示がされないです。下記の書き方だとなぜ表示されないのでしょうか?また、どのように修正することで表示されるのかをご教授いただきたいです。よろしくお願いします。
swift
1 2import SwiftUI 3import SceneKit 4 5struct ContentView: View { 6 var body: some View { 7 gameview() 8 } 9} 10 11struct gameview:UIViewRepresentable{ 12 var scene = SCNScene() 13 var scnView = SCNView() 14 var boxNode = SCNNode() 15 var floorNode = SCNNode() 16 typealias UIViewType = SCNView 17 18 func makeUIView(context: Context) -> SCNView{ 19 scnView.scene = scene 20 FloorNode() 21 BoxNode() 22 Omnilight() 23 ambientlight() 24 Camera() 25 return scnView 26 } 27 func updateUIView(_ uiView: SCNView, context: Context){ 28 29 } 30 func Omnilight(){ 31 let light = SCNNode() 32 light.light = SCNLight() 33 light.light?.type = .omni 34 light.position = SCNVector3(0,10,35) 35 scene.rootNode.addChildNode(light) 36 } 37 func ambientlight(){ 38 let ambientLightNode = SCNNode() 39 ambientLightNode.light = SCNLight() 40 ambientLightNode.light?.type = .ambient 41 ambientLightNode.light?.color = UIColor.gray 42 scene.rootNode.addChildNode(ambientLightNode) 43 } 44 func Camera(){ 45 let camera = SCNNode() 46 camera.camera = SCNCamera() 47 camera.position = SCNVector3(0,20,55) 48 scene.rootNode.addChildNode(camera) 49 } 50 func FloorNode(){ 51 let floor = SCNFloor() 52 floorNode.geometry = floor 53 floor.firstMaterial?.diffuse.contents = UIColor.gray 54 floorNode.physicsBody = SCNPhysicsBody(type: .static, shape: .init(geometry: floor)) 55 floorNode.physicsBody?.collisionBitMask = 1 56 floorNode.physicsBody?.categoryBitMask = 1 57 floorNode.physicsBody?.contactTestBitMask = 1 58 scene.rootNode.addChildNode(floorNode) 59 } 60 func BoxNode(){ 61 let box = SCNBox(width: 10, height: 5, length: 10, chamferRadius: 1) 62 box.firstMaterial?.diffuse.contents = UIColor.brown 63 let boxNode = SCNNode(geometry: box) 64 boxNode.position = SCNVector3(x: 0, y: 30, z: 0) 65 boxNode.rotation = SCNVector4(x: 1, y: 1, z: 1, w: 0.25) 66 boxNode.name = "box" 67 boxNode.physicsBody = .init(type: .dynamic, shape: .init(geometry: box)) 68 boxNode.physicsBody?.collisionBitMask = 1 69 boxNode.physicsBody?.categoryBitMask = 1 70 boxNode.physicsBody?.contactTestBitMask = 1 71 scene.rootNode.addChildNode(boxNode) 72 } 73 func physicsWorld(_ world: SCNPhysicsWorld, didBegin contact: SCNPhysicsContact) { 74 let firstNode = contact.nodeA 75 let secondNode = contact.nodeB 76 77 print(firstNode.name! + " hit to " + secondNode.name!) 78 } 79 80} 81extension SCNPhysicsContactDelegate { 82 83 func physicsWorld(_ world: SCNPhysicsWorld, didBegin: SCNPhysicsContact) { 84 print("Begin!!!") 85 } 86 87 func physicsWorld(_ world: SCNPhysicsWorld, didUpdate: SCNPhysicsContact) { 88 print("Update!!!") 89 } 90 91 func physicsWorld(_ world: SCNPhysicsWorld, didEnd: SCNPhysicsContact) { 92 print("End!!!") 93 } 94} 95
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/02/22 11:20