質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Q&A

解決済

1回答

907閲覧

武器を持たせる方法IKを使ったやり方。

退会済みユーザー

退会済みユーザー

総合スコア0

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

0グッド

0クリップ

投稿2020/03/26 06:10

キャラクターの手に武器を持たせたいのですが上手くいきません。どうしたらいいのでしょうか?Ikを使って手が武器を追うようにしたいのですが上手く来ません。何を間違えたのでしょうか? ヒューマノイドでアニメーターにIkをオンにしています。保存もしていますがOnAnimatorIKは動いているようなのですが

またモデルの手に武器モデルを子にしていますが大丈夫なのでしょうか?ターゲットとなる空のオブジェクトも武器の子にしていますが参考サイトによってすこしやり方が違ったりしてわからなので正しい方法も知りたいです。

イメージ説明

using UnityEngine; public class Controller : MonoBehaviour { /* Ik 関係 Vector3 rightFootPos = new Vector3(0, 0, 0); Vector3 leftFootPos = new Vector3(0, 0, 0); Quaternion rightFootRot = new Quaternion(0, 0, 0, 0); Quaternion leftFootRot = new Quaternion(0, 0, 0, 0); bool isRightFootIK = false; bool isLeftFootIK = false; float RightIkWeight = 0; float LeftIkWeight = 0; Vector3 rayPositionOffset = new Vector3(0, 0, 0); float rayRange = 1.0f; float offset = 0.1f; */ private Vector3 vt; private float input_h; private float input_v; private Vector3 move; private float walk_speed;//移動速度 private Vector3 move_direction;//移動方向 private CharacterController cc; private Animator anim; public Transform LeftHand_IK;// //public GameObject LeftHand_target;// //private Transform LeftHand_IK = LeftHand_target; // public GameObject groundCheck; // Use this for initialization void Start() { move = new Vector3(0, 0, 0); cc = GetComponent<CharacterController>(); anim = GetComponent<Animator>(); walk_speed = 7; } void Move_Mng() { input_h = Input.GetAxis("Horizontal"); input_v = Input.GetAxis("Vertical"); Vector3 move_z = new Vector3(); Vector3 move_x = new Vector3(); move_z = Vector3.Scale(Camera.main.transform.forward, new Vector3(1, 0, 1)).normalized * input_v; move_x = Camera.main.transform.right * input_h; move_direction = move_x + move_z; move_direction.y = 0; move.x = move_direction.x * walk_speed; move.z = move_direction.z * walk_speed; Debug.Log("move.x: \n" + move.x); Debug.Log("move.z: \n" + move.z); if (move_direction != Vector3.zero) { move_direction.y = 0; transform.rotation = Quaternion.LookRotation(move_direction.normalized); } // move.y = -5; if(cc.isGrounded == false) { move.y = -5; }else if(cc.isGrounded == true){ move.y = 0; } } void Animator_Mng() { anim.SetFloat("forward",getInput()); } float getSpeed() { return Mathf.Abs(Mathf.Sqrt(Mathf.Abs(move.x * move.x) + Mathf.Abs(move.z * move.z))); // return 100;//Mathf.Abs(Mathf.Sqrt( Mathf.Abs(move.x * move.x) + Mathf.Abs(move.z * move.z))); } float getInput() { return Mathf.Abs(Mathf.Sqrt(Mathf.Abs(input_h * input_h) + Mathf.Abs(input_v * input_v))); // return 100;//Mathf.Abs(Mathf.Sqrt( Mathf.Abs(move.x * move.x) + Mathf.Abs(move.z * move.z))); } //IKの重みを設定する void SetIkWeight(AvatarIKGoal _goal, float _posWeight, float _rotWeight) { anim.SetIKPositionWeight(_goal, Mathf.Clamp(_posWeight, 0.5f, 1.0f)); anim.SetIKRotationWeight(_goal, Mathf.Clamp(_rotWeight, 0.5f, 1.0f)); } //IKを指定して固定させる void SetIk(AvatarIKGoal goal, Vector3 _pos, Quaternion _rot, bool isAddIKPosition = false) { if (isAddIKPosition) _pos += anim.GetIKPosition(goal); anim.SetIKPosition(goal, _pos); anim.SetIKRotation(goal, _rot); } // Update is called once per frame void Update() { Move_Mng(); // Gravity_Mng(); Animator_Mng(); } ////////////////////////////////////////////////////////////////////////////////////////////// void FixedUpdate() { cc.Move(move * Time.deltaTime); } ////////////////////////////////////////////////////////////////////////////////////////////// private void OnAnimatorIK() { Debug.Log("aaa"); anim.SetIKPositionWeight(AvatarIKGoal.LeftHand, 1); anim.SetIKRotationWeight(AvatarIKGoal.LeftHand, 1); anim.SetIKPosition(AvatarIKGoal.LeftHand, LeftHand_IK.position); anim.SetIKRotation(AvatarIKGoal.LeftHand, LeftHand_IK.rotation); /* //右手を固定 if (LeftHand_IK != null) { SetIkWeight(AvatarIKGoal.LeftHand, 1.0f, 1.0f); SetIk(AvatarIKGoal.LeftHand, LeftHand_IK.position, LeftHand_IK.rotation); } */ } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MMashiro

2020/03/26 12:43

キャラクターの手に武器をもたせる”だけ”でしたらIKなど複雑な仕組みを使用する必要はないと思います。 単純に武器をキャラクターの手の子にするだけでよいと思います
退会済みユーザー

退会済みユーザー

2020/03/27 02:20

質問ですが指を一本一本曲げて綺麗に武器を握るとうなことをしようとしたらどうすればいいのでしょうか? 今回は武器は一つですが複数あって太さが違う場合とかも知りたいです。
MMashiro

2020/03/27 03:22

だいぶ実装が面倒かつ複雑になりそうなので武器が複数あっても持つ部分は同じ太さにする、武器カテゴリごとに同じ太さにする、などモデル側に制約を持たせたほうが良いと思います。 (労力はほかの部分に費やすべきだと感じます)
退会済みユーザー

退会済みユーザー

2020/03/27 03:28

肝心の実装法である指とかはどうすればいいのでしょうか?
退会済みユーザー

退会済みユーザー

2020/03/27 04:38

これはモデルを変形していますがこれで持ち手の大きさを固定にすればいいということでしょうかね?
MMashiro

2020/03/27 04:40

はい、それでいいかと思います
guest

回答1

0

ベストアンサー

これはモデルを変形して持ち手の大きさを固定にすればいいということで自己解決、回答ではなく修正のコメントのためベストアンサーにできず...

投稿2020/03/27 04:43

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問