2014-12-10 5 views
1

안녕하세요 저는 다른 객체가 중심을 통과하지 않습니다이 객체에 떨어지면SceneKit Tube Physics 실린더처럼 움직이는 몸체, 튜브처럼 동작시키는 방법?

let BoxGeometry = SCNTube(innerRadius: 5, outerRadius: 12.5, height: 4) 
     Box = SCNNode(geometry: BoxGeometry) 
     Box.pivot = SCNMatrix4MakeRotation(Float(M_PI_2/8), 0, 1, 0) 
     Box.physicsBody = SCNPhysicsBody(type: SCNPhysicsBodyType.Static, shape: nil) 
     Box.physicsBody?.mass = 5 
     Box.categoryBitMask = colorCategory 
     scene.rootNode.addChildNode(Box) 

그러나 장면 키트과 같이 튜브와 물리 몸을 만들려고 노력하고 있습니다. 대신 그것은 공중에 공중 부양을하고있는 것처럼 보입니다. 물리학 체가 완전한 실린더 인 것처럼 행동하고, 중간에 구멍이있는 튜브처럼 보이지 않습니다. 물체가 중앙을 통과 할 수 있도록이 문제를 어떻게 해결할 수 있습니까? 튜브 모양이 예상대로 나타납니다.

감사합니다.

+0

스타일 포인트 : Swift는 InitialCapCamelCase 이름이 유형 (클래스, 구조체, 열거 형, 프로토콜)에 사용되는 것을 선호하지만 적용하지 않습니다. 다양한 도구와의 상호 운용성을 높이고 다른 사람들과 코드를 공유하기 가독성을 높이려면 변수/상수 이름에 lowerCamelCase를 사용하십시오 :'let boxGeometry','box = SCNNode' 등 – rickster

답변

3

SceneKit의 동적 몸체는 볼록해야합니다. (SceneKit뿐만 아니라 게임에서 충돌 탐지의 일반적인 이론을 살펴보면 볼록형과 오목 형의 충돌 감지간에 속도와 효율성에 큰 차이가 있음을 알 수 있습니다.) 튜브는 오목한 모양입니다. 그 안에 구멍이있다.

운 좋게도 튜브가 정적 인 물체로 사용되고 있습니다.

let shape = SCNPhysicsShape(geometry: tube, 
    options: [SCNPhysicsShapeTypeKey: SCNPhysicsShapeTypeConcavePolyhedron]) 
box.physicsBody = SCNPhysicsBody(type: .Static, shape: shape) 

성능 비용은 여기에 있습니다 : 정적 기관의 경우, 물리 모양 (의 근사치) 오목한 형상을 만들 수있는 옵션이있다. 이 변경 후 CPU 사용량에 의해 프레임 속도가 제한되거나 동적 본문이 (효과적으로) 오목하게 보이게하려는 경우 여러 다른 모양의 복합체 인 물리 모양을 만들어 성능을 향상시킬 수 있습니다. 반지에 배열 된 실린더 또는 상자를 포함하는 더미 노드 계층 구조 (실제로 장면에있는 것이 아닌)를 만든 다음 SCNPhycsicsShape(node:options:)으로 물리 구조를 만듭니다.

+0

시체는 테스트 목적으로 만 정적이었습니다. 목표는 동적 인 것입니다. –

+0

그러면 답안의 끝 부분에 요약 된 것처럼 볼록한 모양의 컴파운드를 사용하여 오목한 모양을 근사해야합니다. – rickster

+0

옵션이 정적에만 적용되었다는 인상을 받았습니다. –

0

물리 구조의 모양을 튜브 바디의 모양과 일치하도록 변경하십시오.