SceneKit - 如何在另一个节点内反弹节点(鱼缸中的鱼)

时间:2016-07-18 00:01:20

标签: ios objective-c scenekit collada

我正在使用.dae(Collada)文件渲染场景。在场景中我有4个节点。

大节点是一个奇形状的矩形“盒子”。我需要其他节点在这个节点内反弹,就像鱼缸里的鱼一样。

我的矩形节点设置如下:

NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:
                            SCNPhysicsShapeTypeKey, SCNPhysicsShapeTypeConcavePolyhedron, nil];

SCNPhysicsShape *shape = [SCNPhysicsShape shapeWithNode:self.box1 options:dictionary];

SCNPhysicsBody *body = [SCNPhysicsBody bodyWithType:SCNPhysicsBodyTypeStatic shape:shape];

self.box1 = [self.scene.rootNode childNodeWithName:@"box1" recursively:NO];
self.box1.physicsBody = body;

我的小节点只是带有动态物体的简单形状。

一切都反弹并相互碰撞。我的问题是较小的节点只会在较大的“盒子”节点的顶部反弹。好像盒子上有盖子。我无法让较小的节点进入“框”内的空白区域。所以它就像较小的'鱼'节点不能进入碗中,因为它们撞击隐形盖子,只是躺在上面。

我希望这是有道理的......我的大脑正在努力解决这个问题。

1 个答案:

答案 0 :(得分:1)

盒子里面有一个"盖子"在上面。它是一个凸起的盒子,没有任何凹陷的东西,这就是你需要的东西,一个凹盒形状作为你的碗#34;。

要创建此项,您需要制作一个"框"用一个"洞"通过建立一个盒子的五个侧面并使一侧(顶部)打开。一定要给每一边都有相当大的宽度/深度,这样较小的物体就不会简单地从一个框架传递到下一个框架。