我曾经写过一个函数,我在其中添加了几何圆锥体到场景中。它看起来像这样:
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)
}
其中nodes是存储SCNNodes的数组。一切都很好。如果我搬家了,那么锥体就会拥有他们所拥有的确切位置,这是一个真实的现实"。
然而,我购买了一个漂亮的僵尸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)
}
不幸的是,即使它在特定的位置创造了僵尸,如果我移动,僵尸"移动"与我一起。它们与移动相机相关地显示,这对我来说是不合需要的。谁能帮我吗?我希望他们像锥体一样。 Thx提前
答案 0 :(得分:0)
只看到有限的代码片段....
我认为它可能与原始DAE文件近似的默认physicShape有关。形状有时可能过于复杂并导致跟踪问题。
尝试将zombieNode physicBody设置为标准框形状
protected UnityPlayer mUnityPlayer; // don't change the name of this variable; referenced from native code
// Setup activity layout
@Override protected void onCreate(Bundle savedInstanceState)
{
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
getWindow().setFormat(PixelFormat.RGBX_8888); // <--- This makes xperia play happy
mUnityPlayer = new UnityPlayer(this);
setContentView(mUnityPlayer);
mUnityPlayer.requestFocus();
}
如果您还没有设置,请设置debugOptions以显示Physics形状。这将有助于调试想要继续进行冲突。
$(window).on("scroll", function() {
if($(window).scrollTop() > 2300) {
$(".bottomMenu").addClass("active");
} else {
$(".bottomMenu").removeClass("active");
}
});
答案 1 :(得分:0)
每次添加僵尸时,不是加载dae文件并循环遍历子节点,而是先将zombie节点存储在属性/变量中,例如在viewdidload中。然后每次添加僵尸时,使用该僵尸节点的.clone属性,并将其添加到rootnode子节点。
如果dae文件中只有一个对象,则不必遍历其子节点,只需使用childnodes.firstObject。