我在scenekit for iOS中编程了一个立方体在地板上滑动,但它会沉入地板

我在scenekit for iOS中编程了一个立方体在地板上滑动,但它会沉入地板,ios,objective-c,scenekit,scnnode,skphysicsworld,Ios,Objective C,Scenekit,Scnnode,Skphysicsworld,我现在有一个场景,一个立方体被扔到scenekit的地板上。我为立方体设置了动画,使其沿x轴在地板上移动,当它移动时,尽管它稍微沉入地板,然后重新定位到地板顶部 以下是一些代码: // create floor SCNFloor *mainFloor = [SCNFloor floor]; SCNNode *floorNode = [SCNNode nodeWithGeometry:mainFloor]; floorNode.position = SCNVector3Make(0.0, -4.0

我现在有一个场景,一个立方体被扔到scenekit的地板上。我为立方体设置了动画,使其沿x轴在地板上移动,当它移动时,尽管它稍微沉入地板,然后重新定位到地板顶部

以下是一些代码:

// create floor
SCNFloor *mainFloor = [SCNFloor floor];
SCNNode *floorNode = [SCNNode nodeWithGeometry:mainFloor];
floorNode.position = SCNVector3Make(0.0, -4.0, 0.0);
[myScene.rootNode addChildNode:floorNode];
SCNPhysicsShape *ground = [SCNPhysicsShape shapeWithGeometry:mainFloor options:nil];
SCNPhysicsBodyType kin = SCNPhysicsBodyTypeKinematic;
SCNPhysicsBody *solid = [SCNPhysicsBody bodyWithType:kin shape:ground];
floorNode.physicsBody = solid;
myScene.physicsWorld.gravity = SCNVector3Make(0.0, -9.8, 0.0);

有人能帮我找出立方体下沉的原因吗?如果你不明白为什么,也许你可以提供一个角色可以行走的工作地板的示例代码?(希望在目标c中,但如果需要,我可以从swift翻译)

我认为地板的类别位掩码和立方体的碰撞位掩码应该是相同的 您可以这样做(在swift中):

floorNode.physicsBody.categoryBitMask = 3
cubeNode.physicsBody.collisionBitMask = 3

我认为地板的类别位掩码和立方体的碰撞位掩码应该是相同的 您可以这样做(在swift中):

floorNode.physicsBody.categoryBitMask = 3
cubeNode.physicsBody.collisionBitMask = 3

根据ProBlaster的建议,我改用[SCNPhysicsBody applyForce]解决了问题。

根据ProBlaster的建议,我改用[SCNPhysicsBody applyForce]解决了问题。

这不起作用,它仍然做同样的事情。

不过,感谢您的回复。请尝试将地板物理形状设置为静态类型,将立方体设置为动态类型。虽然这样做不起作用,但它仍然可以执行相同的操作。:/谢谢你的回复。试着把你的地板物理形状做成静态的,把你的立方体做成动态的,然后按比例缩放?你编辑了立方体。缩放了吗?@ProBlaster不,我没有。你的立方体在重新定位之前从地板上掉了多少(以立方体的百分比表示)?或者,只是一点点,还是像立方体的一半?哦
SCNAction
,嗯,
SCNAction
与物理不太兼容-抱歉,您可能想查看立方体是否按比例缩放?你编辑了立方体。缩放了吗?@ProBlaster不,我没有。你的立方体在重新定位之前从地板上掉了多少(以立方体的百分比表示)?或者,只是一点点,还是像立方体的一半?哦
SCNAction
,嗯,
SCNAction
与物理不太兼容——对不起,您可能需要查看