allowRotation in SceneKit?

2019-08-02 20:13发布

How can I disallow rotation of a node in SceneKit?

For ex., I want a model (cone) to be dynamic, jumping and flying, but always vertically oriented?

I tried fix it like in apple's vehicle demo, it is bad solution. Also I tried below code, but model just slowly and glitchy falls down

- (void)renderer:(id<SCNSceneRenderer>)aRenderer didSimulatePhysicsAtTime:(NSTimeInterval)time{
    _node.rotation = SCNVector4Make(0, 0, 0, 0);
    //[_node.physicsBody resetTransform]; // - tried this too
}

...and finally I did not find any "allowRotation=NO" in scenekit manuals.

标签: ios8 scenekit
4条回答
放我归山
2楼-- · 2019-08-02 20:53

If you want to mix physics simulation and manual transforms, make sure to use a "kinematicBody" and not a "dynamicBody".

查看更多
Summer. ? 凉城
3楼-- · 2019-08-02 21:05

Instead of a Boolean allowsRotation flag like in SpriteKit, SceneKit lets you choose which directions a body is allowed to rotate in and by how much. See the angularVelocityFactor property.

This is probably a better idea than toggling the mass between different values — that approach looks like it could be unintended behavior, so you might not want to rely on it.

查看更多
放我归山
4楼-- · 2019-08-02 21:09

Simple solution:

node.physicsBody?.allowsRotation = false

查看更多
小情绪 Triste *
5楼-- · 2019-08-02 21:16

Ahaha, I found some bug solving this problem (but this is a bug, so it is weird)

  1. create node
  2. set mass=1
  3. add node to scene
  4. set mass=0 - this makes it static and unmovable, but...
  5. set mass=1 - this makes it dynamic, jumping and falling but with fixed rotation!

iOS 8.0.2 iPad mini

查看更多
登录 后发表回答