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

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

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

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

Q&A

解決済

1回答

1345閲覧

foot IKのスクリプトで坂道で角度が着かない原因が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

Unity3D

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

0グッド

0クリップ

投稿2020/01/16 07:48

編集2020/01/16 08:08

IKのスクリプトを書いてDebug.Log()を見て確認しましたがどうもif()文のIKしている行にコードが移動しているということは事実であり。角度を代入していることも事実なのですがなぜか坂道で足元に角度が入っていませんこれはなぜでしょうか?
以下はプレイヤーにアタッチしているスクリプトです。

イメージ説明
イメージ説明

using System.Collections; using System.Collections.Generic; using UnityEngine; public class Controller : MonoBehaviour { private float input_h; private float input_v; private Vector3 move; private Rigidbody rb; private float walk_speed;//移動速度 private Animator ani;//移動速度 private Vector3 gravity; private bool isJump = false;//ジャンプしてるかどうかを管理する private Vector3 v = new Vector3(0,-60.0f,0); GameObject cg; ground ground_sct; // Use this for initialization void Start () { walk_speed = 10.0f; gravity = Vector3.zero; rb = GetComponent<Rigidbody>(); ani = GetComponent<Animator>(); gravity.y = 0; } void Animation_Mng() { float f = Mathf.Abs(Mathf.Sqrt(move.x * move.x + move.z * move.z)); //Debug.Log(f); ani.SetFloat("move",f); } void IK_Mng()//ジャンプ管理 { } // Update is called once per frame void Update () { Animation_Mng(); input_h = Input.GetAxis("Horizontal"); input_v = Input.GetAxis("Vertical"); Vector3 move_x = new Vector3(); Vector3 move_y = new Vector3(); move_y = Vector3.Scale(Camera.main.transform.forward , new Vector3(1, 0, 1)).normalized * input_v * walk_speed; move_x = Camera.main.transform.right * input_h * walk_speed; move = move_x + move_y; if(move != Vector3.zero){ transform.rotation = Quaternion.LookRotation(move.normalized); } rb.velocity = move; Debug.Log("gravity.y: " + gravity.y); } 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 void OnAnimatorIK() { Debug.DrawRay(ani.GetIKPosition (AvatarIKGoal.RightFoot) + rayPositionOffset, -transform.up * rayRange, Color.red); Debug.DrawRay(ani.GetIKPosition (AvatarIKGoal.LeftFoot) + rayPositionOffset, -transform.up * rayRange, Color.red); var ray = new Ray(ani.GetIKPosition (AvatarIKGoal.RightFoot) + rayPositionOffset, -transform.up); RaycastHit hit; if (Physics.Raycast (ray, out hit, rayRange, LayerMask.GetMask ("Field"))) { Debug.Log("ray right"); rightFootPos = hit.point; rightFootRot = Quaternion.FromToRotation(transform.up, hit.normal) * transform.rotation; isRightFootIK = true; } else { isRightFootIK = false; } ray = new Ray(ani.GetIKPosition (AvatarIKGoal.LeftFoot) + rayPositionOffset, -transform.up); if (Physics.Raycast (ray, out hit, rayRange, LayerMask.GetMask ("Field"))) { Debug.Log("ray left"); leftFootPos = hit.point; leftFootRot = Quaternion.FromToRotation(transform.up, hit.normal) * transform.rotation; isLeftFootIK = true; } else { isLeftFootIK = false; } RightIkWeight = ani.GetFloat("Right_foot"); LeftIkWeight = ani.GetFloat("Left_foot"); if(isRightFootIK){ Debug.Log("right ik"); ani.SetIKPositionWeight(AvatarIKGoal.RightFoot,RightIkWeight); ani.SetIKRotationWeight(AvatarIKGoal.RightFoot,RightIkWeight); ani.SetIKPosition(AvatarIKGoal.RightFoot,rightFootPos + new Vector3(0f,offset,0f)); ani.SetIKRotation(AvatarIKGoal.RightFoot,rightFootRot); } if(isLeftFootIK){ Debug.Log("left ik"); ani.SetIKPositionWeight(AvatarIKGoal.LeftFoot,LeftIkWeight); ani.SetIKRotationWeight(AvatarIKGoal.LeftFoot,LeftIkWeight); ani.SetIKPosition(AvatarIKGoal.LeftFoot,leftFootPos + new Vector3(0f,offset,0f)); ani.SetIKRotation(AvatarIKGoal.LeftFoot,leftFootRot); } Debug.Log("aaaaaaa"); } ///////////////////////////////////////////////////////////////////////////////////////////////////////////// void FixedUpdate() { //rb.AddForce(gravity); rb.AddForce(gravity); //rb.AddForce(v); } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

アニメーションコントローラーのパラメーターがとカーブで設定していたパラメーター”名”が違っていたため常に0と認識したいたみたいです、。

投稿2020/01/16 08:30

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問