У меня есть 3d модель поезда с треком.Папка поезда является родительским узлом и имеет два дочерних узла, которые называются железнодорожным и электрическимПри обнаружении ссылки на верхней части опорного изображения 3d поезда дорожки будут показаны и медленно 3d модель поезда анимации на узле дорожки с плавной анимацией.
вот мои скриншоты файла art.assets.scn:
Вот мой код обнаружения опорных изображений, который я использовал для рендерингаМетод делегата:
//train 3d model plane
let trainBottomPlane = SCNPlane(width: 0.08, height: 0.02)
trainBottomPlane.firstMaterial?.diffuse.contents = UIColor.red.withAlphaComponent(0.0)
let trainBottomNode = SCNNode(geometry: trainBottomPlane)
trainBottomNode.eulerAngles.x = -.pi/2
trainBottomNode.position = SCNVector3(0, 0, -0.038)
let overlaytrainNode = self.getNode(withImageName: "trainModel")
print("overlay::\((overlaytrainNode))")
Вот код для получения дочернего узла файла scn:
lazy var trainNode: SCNNode = {
guard let scene = SCNScene(named: "art.scnassets/train.scn"),
let node = scene.rootNode.childNode(withName: "train", recursively: false) else { return SCNNode() }
let newValue = node.childNode(withName: "ElectricTrain", recursively: false)
print("newvalue::::\(newValue)")
newValue.position = SCNVector3(1.0 , 0.05, 0.0)
node.scale = SCNVector3(0.0025, 0.0025, 0.0025)
node.position = SCNVector3(-0.07, 0.00, 0.0)
node.eulerAngles.x = -.pi/2
node.eulerAngles.y = .pi
node.eulerAngles.z = .pi/2
return node
}()
func getNode(withImageName name: String) -> SCNNode {
var node = SCNNode()
switch name {
case "3dMap":
node = dmapNode
case "3dGraph":
node = dgraphNode
case "trainModel":
node = trainNode
default:
break
}
return node
}
Мои вопросы: 1. Как получить дочерний узел и установить позицию?2. Как сделать плавную анимацию для поезда, чтобы двигаться на рельсе, когда обнаружен опорный пробел?
Любая помощь, высоко ценится пожалуйста.