2017-04-09 5 views
0

나는 조작 된 캐릭터가 있습니다. 나는 뼈대 노드를 조사 할 수있다. 그리고 내가 수동으로 그 뼈대에 회전을 적용하면 캐릭터가 새로운 포즈로 전환되는 것을 볼 수있다.SceneKit 제약 조건은 어떻게 뼈에서 작동합니까?

이제 동일한 뼈대로 구속 조건을 설정하려고하면 전혀 움직이지 않습니다. 역 기구학 제약 조건과 간단한 광고 게시판 제약 조건을 시도했지만 그 방법은 없습니다. 여기

뼈 얻을 수있는 코드입니다 : 내가 할 경우

SCNNode *man = [scene.rootNode childNodeWithName:@"Man" recursively:YES] ; 
SCNNode *bodyOfMan = [man childNodeWithName:@"Body" recursively:YES] ; 
SCNNode *bodyRealSkeleton = bodyOfMan.skinner.skeleton ; 
SCNNode *headBone = [bodyRealSkeleton childNodeWithName:@"mixamorig_Head" recursively:YES] ; 

을이 :

headBone.rotation = SCNVector4Make(0,1,0,45) ; 

나는 머리가 제대로 회전

enter image description here

보여주는,이 결과를 얻을

이렇게하면 대신

SCNBillboardConstraint *constraint3 = [SCNBillboardConstraint billboardConstraint] ; 
headBone.constraints = @[constraint3] ; 

머리는 카메라를 따라야 할 때 똑바로 유지됩니다.

"Box"노드에 추가하면 빌보드 제약 조건이 매우 잘 작동하지만 조작 된 메쉬 본에 작동하게하는 방법을 찾지 못했습니다 ... 그리고 찾을 수 없습니다 SCNIKConstraint가 작동하도록하는 방법.

답변

1

문제점의 근본 원인을 찾았습니다.

SCNReferenceNode를 생성하는 XCode의 장면에 맨 메쉬를 추가했습니다. 어떤 이유로 다른 노드와 마찬가지로 "참조 노드"를 실제로 이동/회전/애니메이션 할 수 없습니다.

"로드 된"부울을 실제로 가져올 수 없지만 메쉬가 분명히 내보기에 나타났습니다.

그래서 대신 .scn 파일에서 참조를 제거하고 프로그래밍 방식으로이 장면 ("ManPivot"은 내가 포함시키고 자하는 .scn 파일에서 소개 한 피벗 노드 임)에 메쉬를로드했습니다. 내 메쉬) :

그리고 이제 원하는 방식으로 메쉬를 회전/회전/애니메이션 할 수 있습니다. 나는 심지어 역 기구학을 사용했다.

결론 : 참조 노드와 노드가 전혀 같지 않음 ...