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

SceneKit - How to bounce a node within another node (fish in fish bowl)

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

大节点是一个奇怪的长方形'box'。我需要其他节点像鱼缸里的鱼一样在这个节点内跳来跳去。

我将矩形节点设置如下:

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;

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

一切都反弹并相互碰撞很好..我的问题是较小的节点只会在较大的 'box' 节点的顶部反弹。好像盒子上有盖子。我无法让较小的节点在 'box' 中输入空的 space。所以它就像较小的 'fish' 节点无法进入碗中,因为它们撞到看不见的盖子,只是躺在上面。

我希望这是有道理的..我的大脑在想办法解决这个问题。

盒子上确实有一个 "lid"。它是一个凸盒,没有任何凹陷,这就是你需要的,凹盒形状就像你的"bowl"。

要创建它,您需要制作一个 "box" 和一个 "hole",方法是构建一个盒子的五个面并让一侧(顶部)打开。一定要给每一边相当大的 width/depth,这样较小的物体就不会简单地从一帧传递到下一帧。