#ios #swift #scenekit #arkit
#iOS #swift #scenekit #arkit
Вопрос:
Я использовал ARKit и Scenekit для отображения модели dice при обнаружении горизонтальной плоскости. Я хочу определить значение, отображаемое на кубике после его броска, чтобы можно было реализовать любую другую игровую логику. Как определить количество точек, отображаемых в AR-кубике?
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
//1. Get The Current Touch Point
guard let currentTouchPoint = touches.first?.location(in: sceneView) else {
return
}
//2. Get The Next Feature Point Etc
guard let hitTest = sceneView.hitTest(currentTouchPoint, types: .existingPlane).first else { return }
//3. Convert To World Coordinates
let worldTransform = hitTest.worldTransform
let scene = SCNScene(named: "art.scnassets/diceCollada.scn")
if let diceNode = scene?.rootNode.childNode(withName: "Dice", recursively: true) {
diceNode.position = SCNVector3(worldTransform.columns.3.x, worldTransform.columns.3.y diceNode.boundingSphere.radius, worldTransform.columns.3.z)
sceneView.scene.rootNode.addChildNode(diceNode)
roll(dice: diceNode)
}
//4. Set The New Position
let newPosition = SCNVector3(worldTransform.columns.3.x, worldTransform.columns.3.y, worldTransform.columns.3.z)
dice.simdPosition = SIMD3(newPosition.x, newPosition.y, newPosition.z)
}
Ответ №1:
Довольно простой способ: добавьте 6 невидимых подузлов — назовите их 1,2,3.4 .. — расположите их по каждому краю, прямо в центре. После броска ваш ответ — узел с наибольшим значением Y (при условии, что Y выше). 6 сравнивает, наибольшая ось Y = имя узла.
Редактировать запрос… Создайте edge1Node = SCNBox (небольшого размера), установите его положение. Вам придется поэкспериментировать, потому что я не знаю размер ваших объектов, но, возможно, начните с X — 1, y = 0, z = 0, пока не увидите это. Это ваше смещение от вашего узла dice, поэтому добавьте diceNodeName.addChild(edge1Node). Теперь у вас есть узел, который останется связанным с вашим diceNode, даже если он вращается или перемещается, поэтому просто изменяйте размер и перемещайте его, пока он не окажется на краю вашего куба — технически это даже не обязательно должно быть идеальным — его все равно никто не увидит, это просто различие междустороны. Это 1 сделано, выполните остальные 5 — теперь все 6 подузлов перемещаются вместе с вашим узлом dice — тогда легко увидеть, какой из них выше остальных.
Комментарии:
1. Не могли бы вы сказать, как я могу добавить узел на каждом ребре?. Я попытался добавить пустой узел на каждом ребре в файле .scn и напечатал позицию. значение y. Он отображает значения их положения из файла .scn.