【问题标题】:Create a physicsShape the same size as the geometry of a node创建一个与节点几何尺寸相同的physicsShape
【发布时间】:2014-11-19 18:15:17
【问题描述】:

我有两个盒子。顶盒附有一个动态物理体,底盒附有一个静态体。

physicShapes 是通过以下方式创建的:

topBox.physicsBody = SCNPhysicsBody(type: SCNPhysicsBodyType.Dynamic, shape: nil)
bottomBox.physicsBody = SCNPhysicsBody(type: SCNPhysicsBodyType.Static, shape: nil)

当他们停下来时,顶部的框比应有的高,这表明physicsShape 比应有的大。这是静止的物体:

如何创建与您希望附加到的节点几何形状相同大小/形状的物理形状?

仅供参考:SCNScene 来自导入的 DAE 文件,从 Cheetah 3D 导出​​。

【问题讨论】:

  • 你能解决这个问题吗?
  • 没有。我无法通过导入的 DAE 对象使其正常工作。

标签: ios swift scenekit


【解决方案1】:

尽管从头开始创建形状,但我遇到了同样的问题。我认为问题是convexHull 的默认SCNPhysicsShape.ShapeType 值将创建一个convex polyhedron roughly enclosing the geometry。这总是比一个盒子大。您可以通过打开.showPhysicsShapes 调试选项来确认这一点:

sceneView.debugOptions = .showPhysicsShapes

所以下面的代码使用.boundingBox 选项会有所帮助

let boxBodyShape = SCNPhysicsShape(geometry: SCNBox(width: 1, height: 1, length: 1, chamferRadius: 0),
                                    options: [SCNPhysicsShape.Option.type: SCNPhysicsShape.ShapeType.boundingBox])

let boxBody = SCNPhysicsBody(type: .kinematic, shape: boxBodyShape)

【讨论】:

  • 您是人中的神,先生。谢谢。非常感谢。
【解决方案2】:

Swift 4.1 / Xcode 9.3

不要使用 nil/NULL 进行分配,而是使用实际节点的几何形状。

let node = SCNNode()
node.geometry = SCNBox(width: 0.20, height: 0.25, length: 0.10, chamferRadius: 0)

let physicsShape = SCNPhysicsShape(geometry: node.geometry)
let physicsBody = SCNPhysicsBody(type: .dynamic, shape: physicsShape)
node.physicsBody = physicsBody

这样就可以了。

【讨论】:

    【解决方案3】:
     SCNBox* JustAHappyBox=[SCNBox boxWithWidth:1 height:1 length:1 chamferRadius:0];
    
     SCNNode* TopBoxNode=[SCNNode nodeWithGeometry:JustAHappyBox];
    
     SCNPhysicsShape* TopBoxPhysicsShape=[SCNPhysicsShape shapeWithGeometry:JustAHappyBox options:@{SCNPhysicsShapeTypeKey:SCNPhysicsShapeTypeConvexHull }];
    
     SCNPhysicsBody* TheBoxBody=[SCNPhysicsBody bodyWithType:SCNPhysicsBodyTypeDynamic shape:TopBoxPhysicsShape];
    
     [TopBoxNode setPhysicsBody:TheBoxBody];
    

    希望这会有所帮助。

    顺便说一句,场景套件在识别来自 .dae 的碰撞体时遇到问题,它与视觉几何和碰撞几何的转换有关。生病玩一下,如果我弄明白了,我会告诉你的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-17
      • 2020-08-15
      • 1970-01-01
      • 2017-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      相关资源
      最近更新 更多