外部から読み込んできたモデルに対して物理ボディを設定したいです。
正確には物理ボディを設定してタップしたらARkitの平面にモデルを落としたいと考えています。
落下させるものがSceneKitのジオメトリであれば以下のようにして物理ボディを設定することができました。
lang
1 // ジオメトリを作る 2 let box = SCNBox(width: 0.01, height: 0.03, length: 0.05, chamferRadius: 0.01) 3 //box.firstMaterial?.diffuse.contents = UIColor.gray 4 // ノードのgeometryプロパティに設定する 5 geometry = box 6 // タップされた座標から位置決め 7 let pos = hitTestResult.worldTransform.columns.3 8 let y = pos.y + Float(box.height/2.0) + 0.2 // 箱の高さより0.2m上から落とす 9 position = SCNVector3(pos.x, y, pos.z) 10 // 物理ボディを設定する 11 let bodyShape = SCNPhysicsShape(geometry: geometry!, options: [:]) 12 physicsBody = SCNPhysicsBody(type: .dynamic, shape: bodyShape) 13 physicsBody?.friction = 1.0 // 摩擦 14 physicsBody?.restitution = 0.2 // 反発力
これを自分で読み込んできたモデルに対しても行いたいと思っています。
lang
1 //モデルのを読み込み 2 guard let scene = SCNScene(named: "Garlic.scn", inDirectory: "art.scnassets/garlic") else {fatalError()} 3 guard let garlicNode = scene.rootNode.childNode(withName: "GARLIC", recursively: true) else {fatalError()} 4 // nodeのスケールを調整する 5 let (min, max) = garlicNode.boundingBox 6 let w = CGFloat(max.x - min.x) 7 // 1mを基準にした縮尺を計算 8 let magnification = 0.1 / w 9 garlicNode.scale = SCNVector3(magnification, magnification, magnification) 10 // nodeのポジションを設定 11 garlicNode.position = SCNVector3(planeAnchor.center.x, 0, planeAnchor.center.z) 12 // 物理ボディを設定する 13 let bodyShape = SCNPhysicsShape(geometry: garlicNode!, options: [:]) 14 physicsBody = SCNPhysicsBody(type: .dynamic, shape: bodyShape) 15 physicsBody?.friction = 1.0 // 摩擦 16 physicsBody?.restitution = 0.2 // 反発力
これで同じように読み込んだモデルに対しても物理ボディを設定できるかと思ったのですが、設定することができませんでした。
わかる方いらっしゃいましたらどうすればモデルに物理ボディをつけられるのか教えてください。よろしくお願いします
あなたの回答
tips
プレビュー