swiftのscenekitで、例えばBoxを作成して上空から自由落下させます。
床面に衝突すると転がりますが、転がって停止した後の座標の取得の仕方がわかりません。
import UIKit import SceneKit class GameViewController: UIViewController { @IBOutlet var sceneView: SCNView! var scene: SCNScene! override func viewDidLoad() { super.viewDidLoad() sceneView.backgroundColor = UIColor.lightGray scene = SCNScene() self.sceneView.scene = scene sceneView.autoenablesDefaultLighting = true sceneView.allowsCameraControl = true setFloor() setCamera() makeBox() } func setFloor() { let floor: SCNFloor = SCNFloor() floor.width = 30.0 floor.length = 30.0 floor.firstMaterial?.diffuse.contents = UIColor(red: 1, green: 1, blue: 1, alpha: 0.1) let floorShape = SCNPhysicsShape(geometry: floor, options: nil) let floorBody = SCNPhysicsBody(type: .static, shape: floorShape) floorBody.restitution = 0.8 floorBody.physicsShape = floorShape let floorNode = SCNNode(geometry: floor) floorNode.physicsBody = floorBody scene.rootNode.addChildNode(floorNode) } func makeBox() { let box: SCNGeometry = SCNBox(width: 1, height: 1, length: 1, chamferRadius: 0.2) box.firstMaterial?.diffuse.contents = UIColor(red: 1, green: 0, blue: 0, alpha: 1) let physicsShape = SCNPhysicsShape(geometry: box, options: nil) let boxBody = SCNPhysicsBody(type: .dynamic, shape: nil) boxBody.restitution = 0.8 boxBody.physicsShape = physicsShape let boxNode = SCNNode(geometry: box) boxNode.position = SCNVector3(Float.random(in: -5 ... 5), 11, 0) //boxNode.physicsBody = boxBody boxNode.name = "box" コード
タップしオブジェクトを選択しても、そのポジションは初期設定のポジションのままです。
@objc func tapped(recognizer: UIGestureRecognizer) { let view = recognizer.view as? SCNView let touchLocation = recognizer.location(in: view) let hitTestResult = sceneView.hitTest(touchLocation, options: nil) if hitTestResult.count > 0 { touchNode = hitTestResult.first!.node //sceneView.allowsCameraControl = false print("tapped/ x=",touchNode.position.x,", y=",touchNode.position.y,", z=",touchNode.position.z) } }
自由落下に限らず、オブジェクト同士がぶつかった後の座標を取得するにはどうしたらよいでしょうか
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。