2016-07-18 5 views
1

Я рендеринга сцены из файла .dae (Collada). Внутри сцены у меня 4 узла.SceneKit - Как отскочить узел в другом узле (рыба в рыбной чаше)

Большой узел представляет собой прямоугольную коробку нечетной формы. Мне нужно, чтобы другие узлы отскакивали внутри этого узла, как рыба в аквариуме.

У меня есть прямоугольный узел установлен следующим образом:

NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys: 
          SCNPhysicsShapeTypeKey, SCNPhysicsShapeTypeConcavePolyhedron, nil]; 

SCNPhysicsShape *shape = [SCNPhysicsShape shapeWithNode:self.box1 options:dictionary]; 

SCNPhysicsBody *body = [SCNPhysicsBody bodyWithType:SCNPhysicsBodyTypeStatic shape:shape]; 

self.box1 = [self.scene.rootNode childNodeWithName:@"box1" recursively:NO]; 
self.box1.physicsBody = body; 

Мои меньшие узлы только простые формы с динамическими телами.

Все отскакивает и сталкивается друг с другом. Моя проблема в том, что меньшие узлы будут только отскакивать в верхней части большего «ящика» узла. Как будто на коробке была крышка. Я не могу заставить меньшие узлы войти в пустое пространство в поле. Таким образом, это похоже на то, что меньшие «рыбные» узлы не могут войти в чашу, поскольку они разбиваются о невидимую крышку и просто лежат сверху.

Надеюсь, это имеет смысл. Мой мозг жарится, пытаясь понять это.

ответ

1

В коробке есть «крышка». Это выпуклая коробка, ничто не вогнутое, это то, что вам нужно, вогнутую коробчатую форму в качестве вашей «чаши».

Для создания этого вам необходимо создать «ящик» с «отверстием», построив пять боковых сторон коробки и оставив одну сторону (верхнюю) открытой. Не забудьте дать каждой стороне значительную ширину/глубину, поэтому мелкие объекты не просто проходят от одного кадра к другому.

+0

Спасибо. Вот что я в итоге сделал. Я надеялся, что сценарий сможет использовать истинную форму 3D-модели. – mtb

+0

[SCNPhysicsBody bodyWithType: SCNPhysicsBodyTypeStatic shape: shape], просто установите параметр shap в nil. Это позволит получить более схожую геометрию, созданную функцией sceneKit автоматически. – ooOlly