Tengo una aplicación SceneKit con 2 archivos .scn
en la carpeta art.scnassets. El ship.scn
base que viene con el proyecto y un nuevo archivo orcIdle.scn
que agregué yo mismo.
Cuando llamo a este código en este barco, lo mueve correctamente:
self.myScene = SCNScene(named: "art.scnassets/ship.scn")! // Set the scene to the view let ship = (myScene.rootNode.childNode(withName: "ship", recursively: false))! ship.position = SCNVector3(0, 0, -5) self.sceneView.scene = myScene
Cuando llamo al mismo código en mi archivo orcIdle, coloca el orco exactamente en (0,0,0)
self.myScene = SCNScene(named: "art.scnassets/orcIdle.scn")! // Set the scene to the view let orc = (myScene.rootNode.childNode(withName: "orcIdle", recursively: false))! orc.position = SCNVector3(0, 0, -5) self.sceneView.scene = myScene
aquí hay capturas de pantalla del nodo de archivo:
Este es el archivo de envío predeterminado incluido en el proyecto por Xcode.
Este es mi archivo orcIdle.
Como puede ver, es exactamente el mismo código pero 1 se mueve y el otro no. Además, en la esquina superior derecha de las imágenes, puedo ajustar el valor Z allí. Funciona para .ship, pero no para .orcIdle.
¿Es un problema de escala? ¿Alguna idea?
Aquí hay una nueva captura de pantalla con la mayor parte del gráfico de escena que puedo capturar.
Por lo general, debe seleccionar la jerarquía superior de un esqueleto (como el nodo root
) para mover la geometría, ya que su malla estaba vinculada al esqueleto. Si el esqueleto del modelo es considerablemente más profundo en la jerarquía, use la sintaxis de subíndice .childNodes[x]
para obtener la articulación deseada.
Pero una solución basada en su archivo .scn
es la siguiente: cree un objeto topNode
y coloque root
y LOD_Group
dentro de él.
Así que tu código debería verse así:
let scene = SCNScene(named: "art.scnassets/orcIdle.scn")! orc = scene.rootNode.childNode(withName: "topNode", recursively: true)! orc.position = SCNVector3(0,0,-20)