2016-12-22 5 views
0

のように、手が奇妙な文字の真ん中に置かれているだけです。右手と左手は、手を置くべき位置のgameobjectsです。Unity3DでInverse Kinematicsを使って銃を手に入れようとすると、

左のスクリーンショットは再生モードにあり、中間のスクリーンショットはありません。そこでIKはありません。 screenshots (ユニティ例から適応)ソースコード:

void OnAnimatorIK(int layerIndex) { 
    float aim = 1f; 

    if (layerIndex == 0) { 
     if (player != null) { 
      Vector3 target = player.transform.GetChild(0).position + Vector3.up; 

      animator.SetLookAtPosition(target); 
      animator.SetLookAtWeight(aim, 0.5f, 0.5f, 0.0f, 0.5f); 

     } 
    } 

    if (layerIndex == 1) { 
     if (leftHandOnGunPosition != null) { 
      animator.SetIKPosition(AvatarIKGoal.LeftHand, leftHandOnGunPosition.transform.position); 
      animator.SetIKRotation(AvatarIKGoal.LeftHand, leftHandOnGunPosition.transform.rotation); 
      animator.SetIKPositionWeight(AvatarIKGoal.LeftHand, aim); 
      animator.SetIKRotationWeight(AvatarIKGoal.LeftHand, aim); 
     } 

     if (rightHandOnGunPosition != null) { 
      animator.SetIKPosition(AvatarIKGoal.RightHand, rightHandOnGunPosition.transform.position); 
      animator.SetIKRotation(AvatarIKGoal.RightHand, rightHandOnGunPosition.transform.rotation); 
      animator.SetIKPositionWeight(AvatarIKGoal.RightHand, aim); 
      animator.SetIKRotationWeight(AvatarIKGoal.RightHand, aim); 
     } 
    } 
} 

誰も私が間違ってやっているものを私に伝えることができますか?

更新: 私はちょうど右手が左手より先にあることに気づいた。ちょうど銃の位置のように。テストのために、私は手の目標位置を入れ替え、次に左手は右手の前にありました。だから間違いなく正しい位置に手を動かそうとしています...ただそこに着いているだけではありません。

update2: また、lookatもの(if(layerIndex == 0)のすべて)をオフにしてみましたが、何も止めていないことを確認しました。それ以上の違いはありませんでしたが、もうプレーヤーを見ていませんでした。

答えて

0

申し訳ありませんが、私がモデルを追加したとき、navmeshagentと比較して高すぎました。navmeshagentとモデルの間に子供のゲームオブジェクトを作成し、-1にyを付けました。

IKの位置に+ Vector3.upを追加することで、一時的にIKを修正することができました。

適切な解決策は、子供の間でy -1を削除し、navmeshagentのベースオフセットを1から0に変更することでした。

関連する問題