2017-04-09 4 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ファイルに導入したピボットノードです)。私のメッシュ):

私は今、私が望むどのような方法でも、私のメッシュを移動/回転/アニメーションすることができます。私は逆運動学を働かえさえしました。

結論:参照ノードとノードは全く同じではありません。

関連する問題