我曾经编写过一个函数,在其中将几何锥体添加到场景中。它看起来像这样:
func addZombies(i:Int, x: Float, y: Float, z: Float)
{
let node = SCNNode()
node.geometry = SCNCone(topRadius: 0.0, bottomRadius: 1, height: 2)
node.position = SCNVector3(x, y, z)
sceneView.scene.rootNode.addChildNode(node)
nodes.append(node)
}
其中节点是存储 SCNNode 的数组。一切都很好。如果我移动了,锥体就会保持原来的位置,这是真正的“现实”。
但是,我购买了一个漂亮的 3D 僵尸模型,并尝试将锥体更改为模型。我找到了某种解决方案并尝试自己实现。这就是我想到的:
func addZombies(i:Int, x: Float, y: Float, z: Float)
{
guard let zombieScene = SCNScene(named: "art.scnassets/StrongZombie.DAE") else { return }
let zombieNode = SCNNode()
let zombieSceneChildNodes = zombieScene.rootNode.childNodes
for childNode in zombieSceneChildNodes
{
zombieNode.addChildNode(childNode)
}
zombieNode.position = SCNVector3(x, y, z)
zombieNode.scale = SCNVector3(0.5, 0.5, 0.5)
//zombieNode.look(at: (sceneView.pointOfView?.position)!)
sceneView.scene.rootNode.addChildNode(zombieNode)
nodes.append(zombieNode)
}
不幸的是,尽管它在特定位置创建了僵尸,但如果我移动,僵尸也会跟着我“移动”。它们是相对于移动摄像机显示的,这对我来说是不合需要的。谁能帮我吗?我想要它们就像锥体一样。提前谢谢
最佳答案
只看到有限的代码片段......
我认为这可能与原始 DAE 文件近似的默认 PhysicShape 有关。形状有时可能过于复杂并导致跟踪问题。
尝试将zombieNode physicalBody设置为标准盒子形状
let box = SCNBox(width:0.01, height: 0.01, length: 0.05, chamferRadius: 0.001)
zombieNode.physicsBody = SCNPhysicsBody(type: .dynamic, shape: SCNPhysicsShape(geometry:box))
如果您还没有这样做,还可以设置 debugOptions 以显示物理形状。这也将有助于调试发生冲突的情况。
sceneView.debugOptions = .showPhysicsShapes
关于swift - 如何将 3D 模型添加到场景中,使其具有特定的 XYZ 位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47915887/