Узел движется, когда шарнир находится внутри геометрии другого узла
Моя сцена содержит;
Статическое тело в корне сцены
_firstNode = [[SCNNode alloc] init];
_firstNode.position = SCNVector3Make(0, 0, 0);
_firstNode.geometry = [SCNSphere sphereWithRadius:950];
_firstNode.geometry.firstMaterial.diffuse.contents = [UIColor greenColor];
_firstNode.physicsBody = [SCNPhysicsBody staticBody];
[[scene rootNode] addChildNode:_firstNode];
Динамическое тело со свойством разворота в (0,-1200,0)
_secondNode = [[SCNNode alloc] init];
_secondNode.position = SCNVector3Make(0, 0, 0);
_secondNode.pivot = SCNMatrix4MakeTranslation(0, -1200, 0);
_secondNode.physicsBody = [SCNPhysicsBody dynamicBody];
_secondNode.physicsBody.physicsShape = [SCNPhysicsShape shapeWithGeometry:[SCNSphere sphereWithRadius:2] options:nil];
[[scene rootNode] addChildNode:_secondNode];
Поскольку оба узла являются дочерними по отношению к корневому узлу, стержень расположен в центре статического узла. Идея состоит в том, чтобы запустить SCNAction, который вращает _secondNode вокруг _firstNode вокруг своей оси X, и applyTorque при необходимости поворачивает вокруг своей оси Y.
Этот код на данный момент хорош, проблема в том, что хотя _firstNode остается статичным, он толкает _secondNode.pivot на поверхность геометрии _firstNode. Однако, просто забрав физику _firstNode, тело тоже не решит проблему.
1 ответ
Звучит так, как будто у него слишком много трения, когда он пытается вращаться. Попробуйте установить angularDamping на 0. По умолчанию это 0,1. AngularDamping моделирует величину трения при вращении объекта. Значение 0 имитирует отсутствие трения (вращение навсегда). Значение 1,0 имитирует 100% трения или статическое в основном.
Установите это так...
yourNode.physicsBody.angularDamping = 0