【问题标题】:sceneKit physics body's scale doesn't adhere attached nodesceneKit 物理体的比例不粘附附加节点
【发布时间】:2018-01-15 00:35:58
【问题描述】:

在我的情况下,当附加节点的比例发生变化时,我需要更新物理体的比例。但是,节点的物理体在节点规模发生变化后总是相同的。打印节点缩放后,我确定它包含新值。

我的代码在这里,它是示例而不是工作。当我缩小碰撞网格时,物理体仍然保持单位比例的大小。

SCNNode *collisionMesh = childNode;
collisionMesh.scale = self.selectedRsc.scale;
NSLog(@"selectedRsc:%@",aimNode);
NSLog(@" selectedRsc scal:%@",[NSValue valueWithSCNVector3: aimNode.scale]);
NSLog(@" collisionMesh scal:%@",[NSValue valueWithSCNVector3: collisionMesh.scale]);
SCNPhysicsBody *body = [SCNPhysicsBody bodyWithType:SCNPhysicsBodyTypeKinematic shape:[SCNPhysicsShape shapeWithGeometry:collisionMesh.geometry options:nil]];
body.categoryBitMask =bitmaskCollision;
collisionMesh.physicsBody = body;

【问题讨论】:

    标签: ios scenekit


    【解决方案1】:

    在网上搜索了一下,发现物理引擎一般不支持比例变换。有一些informations

    我还发现将 nil 传递给 +bodyWithType:shape: 的 shape 参数可以正常工作。

    SCNNode *collisionMesh = childNode;
    collisionMesh.scale = self.selectedRsc.scale;
    NSLog(@"selectedRsc:%@",aimNode);
    NSLog(@" selectedRsc scal:%@",[NSValue valueWithSCNVector3: aimNode.scale]);
    NSLog(@" collisionMesh scal:%@",[NSValue valueWithSCNVector3: collisionMesh.scale]);
    //this will work fine, physics body will get correct scale.
    SCNPhysicsBody *body = [SCNPhysicsBody bodyWithType:SCNPhysicsBodyTypeKinematic shape:nil];
    body.categoryBitMask =bitmaskCollision;
    collisionMesh.physicsBody = body;
    

    所以我进一步挖掘了苹果的文档并注意到了这个描述。 根据SCNPhysicsShapeScaleKey reference

    SceneKit 的物理模拟忽略了 规模 模拟碰撞时包含物理体的节点的属性。相反,在创建自定义物理形状时使用此选项提供比例因子。 (如果您为节点创建物理体而不指定自定义形状,SceneKit 会在创建时使用节点的比例属性来推断此比例因子。)

    这解释了为什么 pass nil 会起作用。在不指定形状的情况下创建节点的物理体时,sceneKit 会根据附加节点的几何形状自动计算形状,这将考虑节点的比例变换。

    您也可以使用SCNPhysicsShapeScaleKey 选项指定比例因子。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-19
      • 1970-01-01
      • 2018-06-20
      • 2018-04-22
      • 1970-01-01
      • 1970-01-01
      • 2018-06-07
      相关资源
      最近更新 更多