Unityで簡単にポーズを編集できるツールを作っています。
どのようなものかはざっくり下記リンクで説明しております。お手数おかけします。
アニメーションコントローラーにつきまして
HumanPoseHandlerの値をスライダーで変更する機能を実装しています。
問題はスライダーを調整して例えば前屈姿勢にしたいとき、
つま先が上がってしまうような”くの字”になるのはおそらくは仕様だと思うのですが、
足の底が地面についた一般的な前屈、そして柔軟体操の時のように尻もちをついた前屈のような姿勢にできる方法はないでしょうか?
よろしくお願いします。
参考動画をアップしました。どのようなものかわかりやすいかと思います。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答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
総合スコア10811
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/08 05:49