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

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

新規登録して質問してみよう
ただいま回答率
85.46%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1753閲覧

HumanPoseHandlerでの姿勢制御に関しまして

user10

総合スコア37

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/11/06 06:14

Unityで簡単にポーズを編集できるツールを作っています。
どのようなものかはざっくり下記リンクで説明しております。お手数おかけします。
アニメーションコントローラーにつきまして

HumanPoseHandlerの値をスライダーで変更する機能を実装しています。
問題はスライダーを調整して例えば前屈姿勢にしたいとき、
つま先が上がってしまうような”くの字”になるのはおそらくは仕様だと思うのですが、
足の底が地面についた一般的な前屈、そして柔軟体操の時のように尻もちをついた前屈のような姿勢にできる方法はないでしょうか?
よろしくお願いします。
参考動画をアップしました。どのようなものかわかりやすいかと思います。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ちょうど先日「UnityのAnimationをスクリプトから上書きしたい(例:腰をひねる)」とのご質問に対してHumanPoseHandlerの使用を提案したのですが、上半身と下半身がそれぞれ逆にひねられるのを解消したいとのコメントをいただきまして、Hipsボーンの回転も併せて調整する案を提示いたしました。あちらと同様の要領で実現できないでしょうかね?

lang

1using UnityEngine; 2 3[RequireComponent(typeof(Animator))] 4public class PoseModifier2 : MonoBehaviour 5{ 6 [SerializeField][Range(-2.0f, 2.0f)] private float spineFrontBack; 7 [SerializeField][Range(-2.0f, 2.0f)] private float chestFrontBack; 8 [SerializeField][Range(-2.0f, 2.0f)] private float upperChestFrontBack; 9 [SerializeField][Range(0.0f, 1.0f)] private float revertHipsTransform; 10 [SerializeField][Range(0.0f, 1.0f)] private float lieOnBack; 11 private Transform hips; 12 private HumanPose pose; 13 private HumanPoseHandler poseHandler; 14 private Vector3 initialHipsPosition; 15 private Quaternion initialHipsRotation; 16 17 private void OnEnable() 18 { 19 var animator = this.GetComponent<Animator>(); 20 this.poseHandler = new HumanPoseHandler(animator.avatar, this.transform); 21 this.poseHandler.GetHumanPose(ref this.pose); 22 this.hips = animator.GetBoneTransform(HumanBodyBones.Hips); 23 this.initialHipsPosition = this.hips.localPosition; 24 this.initialHipsRotation = this.hips.localRotation; 25 } 26 27 private void OnDisable() 28 { 29 this.poseHandler.Dispose(); 30 } 31 32 private void LateUpdate() 33 { 34 // ポーズを修正する 35 this.pose.muscles[0] = this.spineFrontBack; 36 this.pose.muscles[3] = this.chestFrontBack; 37 this.pose.muscles[6] = this.upperChestFrontBack; 38 this.poseHandler.SetHumanPose(ref this.pose); 39 40 // Hipsの姿勢をrevertHipsTransformに応じて元に戻す 41 this.hips.localPosition = Vector3.Lerp(this.hips.localPosition, this.initialHipsPosition, this.revertHipsTransform); 42 this.hips.localRotation = Quaternion.Slerp(this.hips.rotation, this.initialHipsRotation, this.revertHipsTransform); 43 44 // 仰向けに寝かせるのは、ルートの回転で表現する...とかでしょうかね? 45 this.transform.localRotation = Quaternion.Euler(Mathf.Lerp(0.0f, -90.0f, this.lieOnBack), 0.0f, 0.0f); 46 } 47}

図

投稿2021/11/06 20:03

Bongo

総合スコア10807

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

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

user10

2021/11/08 05:49

この方法で解決できました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問