🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Unity3D

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

Q&A

解決済

3回答

417閲覧

IKが反応しない原因が知りたい スクリプト

退会済みユーザー

退会済みユーザー

総合スコア0

Unity3D

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

0グッド

0クリップ

投稿2019/11/02 08:17

編集2019/11/03 10:56

IKを使って段差や斜面で足の裏が地面に着くというIkの処理を実装したいのですが実装できませんどうしたらいいのでしょうか?

1、ヒューマノイドです。
2、IK passにチェックを入れてる
3、最低一つのアニメクリップが入ったアニメーションコントローラを入れた
4.カーブを作成し1にしている。二枚目の設定画像を参照

質問ですが重さとはなんでしょうか?0~1の数値
質問2 スクリプトをアタッチする場所をそのプレイヤーにアタッチしているのですがそもそもどこにアタッチすべきなのでしょうか?

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

using UnityEngine; using System.Collections; using System; public class IK : MonoBehaviour { //private CharacterController characterController; private Animator animator; // テスト用のIKのOn・Offスイッチ //[SerializeField] private bool isUseIK = true; // 右足のウエイト private float rightFootWeight = 0f; // 左足のウエイト private float leftFootWeight = 0f; // 右足の位置 private Vector3 rightFootPos; // 左足の位置 private Vector3 leftFootPos; // 右足の角度 private Quaternion rightFootRot; // 左足の角度 private Quaternion leftFootRot; // 足を付く位置のオフセット値 [SerializeField] private float offset = 0.1f; // レイを飛ばす距離 [SerializeField] private float rayRange = 1f; private bool isRightFootIK = false; private bool isLeftFootIK = false; // コライダの位置を調整する時のスピード [SerializeField] private float smoothing = 2f; // レイを飛ばす位置の調整値 [SerializeField] private Vector3 rayPositionOffset = Vector3.up * 0.3f; void Start() { // characterController = GetComponent<CharacterController>(); animator = GetComponent<Animator>(); } void OnAnimatorIK() { // 右足用のレイの視覚化 Debug.DrawRay(animator.GetIKPosition(AvatarIKGoal.RightFoot), (-transform.up * rayRange), Color.red); // Debug.Log(-transform.up * rayRange); var ray = new Ray(animator.GetIKPosition(AvatarIKGoal.RightFoot), -transform.up); RaycastHit hit; /*右足用のレイを飛ばす処理*/ if (Physics.Raycast(ray, out hit, rayRange)) { Debug.Log("右足 IK"); rightFootPos = hit.point; rightFootRot = Quaternion.FromToRotation(transform.up, hit.normal) * transform.rotation; isRightFootIK = true; } else { isRightFootIK = false; } ray = new Ray(animator.GetIKPosition(AvatarIKGoal.LeftFoot), -transform.up); // 左足用のレイの視覚化 Debug.DrawRay(animator.GetIKPosition(AvatarIKGoal.LeftFoot), -transform.up * rayRange, Color.red); /*左足用のレイを飛ばす処理*/ if (Physics.Raycast(ray, out hit, rayRange)) { Debug.Log("左足 IK"); leftFootPos = hit.point; leftFootRot = Quaternion.FromToRotation(transform.up, hit.normal) * transform.rotation; isLeftFootIK = true; } else { isLeftFootIK = false; } // IKを使う時だけ if (isUseIK) { Debug.Log("IK"); // アニメーションの状態からウエイトを取得 rightFootWeight = animator.GetFloat("RightFootWeight"); leftFootWeight = animator.GetFloat("LeftFootWeight"); /*右 IK*/ if (isRightFootIK) { // 右足ウエイトの設定 animator.SetIKPositionWeight(AvatarIKGoal.RightFoot, rightFootWeight); animator.SetIKRotationWeight(AvatarIKGoal.RightFoot, rightFootWeight); // 右足の位置と角度を設定 animator.SetIKPosition(AvatarIKGoal.RightFoot, rightFootPos + new Vector3(0f, offset, 0f)); animator.SetIKRotation(AvatarIKGoal.RightFoot, rightFootRot); } /*左 IK*/ if (isLeftFootIK) { // 左足ウエイトの設定 animator.SetIKPositionWeight(AvatarIKGoal.LeftFoot, leftFootWeight); animator.SetIKRotationWeight(AvatarIKGoal.LeftFoot, leftFootWeight); // 左足の位置と角度を設定 animator.SetIKPosition(AvatarIKGoal.LeftFoot, leftFootPos + new Vector3(0f, offset, 0f)); animator.SetIKRotation(AvatarIKGoal.LeftFoot, leftFootRot); } } } }

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

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

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

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

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

guest

回答3

1

ベストアンサー

https://gametukurikata.com/program/changecollider
このページはアニメーションに合わせてコライダーのサイズを変えています。

投稿2019/11/02 21:34

退会済みユーザー

退会済みユーザー

総合スコア0

izkn👍を押しています

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

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

1

まずはアニメーションパラメータを作成します。と書いていますが、、
これもやってみたらどうでしょう!

投稿2019/11/02 21:20

退会済みユーザー

退会済みユーザー

総合スコア0

izkn👍を押しています

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

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

1

足の裏が斜めの地面にくっついているということですね?

投稿2019/11/02 09:29

退会済みユーザー

退会済みユーザー

総合スコア0

izkn👍を押しています

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

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

退会済みユーザー

退会済みユーザー

2019/11/02 09:32

それだったらそのプレイヤーのモデルのアニメーションが必要になってくると思います、、、
退会済みユーザー

退会済みユーザー

2019/11/02 09:37

待機モーションと走るモーションを入れているのですが何をすれば実装できるのでしょうか?
退会済みユーザー

退会済みユーザー

2019/11/03 08:42

そのコードなのですがバグありレイや上向きに飛んでいるのとレイヤーを設定するとそのレイヤーでしか IKできないのでちょっと編集しています。
退会済みユーザー

退会済みユーザー

2019/11/03 10:45

質問内容を変更しました。
退会済みユーザー

退会済みユーザー

2019/11/04 09:13

全然良い回答をできなくてすみません、、 僕も少しやってみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問