Вызовите метод из SCNNode, собранного из Collision - PullRequest
0 голосов
/ 20 января 2019

Я хочу создать игру-стрелялку для ARKit на IOS.В этой игре я стреляю снарядами в сцену, и когда они сталкиваются, я хочу нанести некоторый урон объекту, который был поражен.

func physicsWorld(_ world: SCNPhysicsWorld, didBegin contact: SCNPhysicsContact) {
        if contact.nodeA.physicsBody?.categoryBitMask == PhysicType.Target.rawValue {
            //Hit target
        }else if contact.nodeB.physicsBody?.categoryBitMask == PhysicType.Target.rawValue {
            //Hit target
        }
    }

То, что я ищу, должно выглядеть примерно так:

let target = contact.nodeA as? Target
target.hit()

Но, похоже, невозможно привести этот узел к моему классу Target.Другая идея состояла в том, чтобы сравнить положение целевого узла со всеми узлами в сцене.И если они имеют одинаковую позицию, я знаю, на каком узле я могу вызвать метод:

func hitTarget(node: SCNNode){
        for child in scene.childNodes{
            if child.name == "Target" {
                guard let target = child as? Target else  {continue}
                if target.presentation.position.x == node.presentation.position.x &&
                    target.presentation.position.y == node.presentation.position.y &&
                    target.presentation.position.z == node.presentation.position.z{
                    target.hit(damage: 5)
                }
            }
        }

    }

В настоящее время у меня есть один объект в сцене, поэтому он должен быть целевым объектом.Но так или иначе обе позиции очень разные.Я действительно не знаю разницу между node.position и node.presentation.position.Но я попробовал оба.

Важно сказать, потому что я думаю, что это может быть проблемой: у меня есть центральный объект.И весь целевой объект, который я добавляю, относительно этого центрального объекта.Итак, у меня есть rootNode-> centerObj -> [все целевые объекты] Может быть, именно поэтому позиции не совпадают.

То, что я хочу знать, это то, как правильно получить правильный узел,который я ударил и может привести его к классу, к которому он принадлежит?

...