SceneKit - 如何在另一个节点内反弹一个节点(鱼缸里的鱼)
Posted
技术标签:
【中文标题】SceneKit - 如何在另一个节点内反弹一个节点(鱼缸里的鱼)【英文标题】:SceneKit - How to bounce a node within another node (fish in fish bowl) 【发布时间】:2016-11-20 11:47:09 【问题描述】:我正在从 .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】:盒子上有一个“盖子”。它是一个凸盒子,没有任何凹面,这正是你所需要的,一个凹盒子形状作为你的“碗”。
要创建它,您需要制作一个带有“孔”的“盒子”,方法是构建一个盒子的五个面并让一侧(顶部)打开。一定要给每一边相当大的宽度/深度,这样较小的物体就不会简单地从一帧穿过到下一帧。
【讨论】:
谢谢。这就是我最终做的。我希望 Scenekit 可以使用 3D 模型的真实形状。 [SCNPhysicsBody bodyWithType:SCNPhysicsBodyTypeStatic shape:shape],只需将 shap 参数设置为 nil。这将获得更相似的几何图形,由 sceneKit 自动创建。以上是关于SceneKit - 如何在另一个节点内反弹一个节点(鱼缸里的鱼)的主要内容,如果未能解决你的问题,请参考以下文章
SceneKit - 在另一个 SCNNode 上添加 SCNNode
在 viewDidLoad 期间应用的 SceneKit 节点旋转无效
SceneKit:如何将节点的移动限制在本地的一个轴上,而不是整个世界