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

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

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

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

Unity

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

Q&A

解決済

1回答

970閲覧

アニメーションコントローラーにつきまして

user10

総合スコア37

C#

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

Unity

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

0グッド

0クリップ

投稿2021/10/18 05:24

Humanoidのリグでモデルのポーズ編集するツールを作っていまして、IKでざっくりポーズを編集する機能とHumanPoseHandlerを用いて細かく編集する機能を入れようと思っていますのですが、
アニメーションコントローラーがアタッチされている状態ではHumanPoseHandlerの制御を受け付けなかったです。
アニメーションコントローラーがない状態では制御可能です。
こちらはそのような仕様なのでしょうか?
また、アニメーションコントローラーのアタッチされた状態で制御できる方法はありませんでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

HumanPoseHandlerによる制御を行うタイミングの問題かもしれませんね。
去年の話になってしまいますが、「UnityのMecanimのアニメーションを変化させたい」とのご質問に挑戦してみたことがありまして、あの時はLateUpdateのタイミングでSetHumanPoseを行うようにしてみました。
もしUpdateのタイミングでSetHumanPoseを行ったとしても、「イベント関数の実行順序 - Unity マニュアル」の図にありますようにUpdateAnimatorによる姿勢更新(「Internal animation update」と書かれた部分)よりも前の位置にありますので、せっかくSetHumanPoseによって設定した姿勢がAnimatorによって上書きされてしまうと思われます。
そのような可能性に心当たりがありましたら、姿勢制御のタイミングを変えてみるというのを試してみてはいかがでしょうか。

投稿2021/10/22 10:32

Bongo

総合スコア10811

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

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

user10

2021/10/24 03:04

ありがとうございます。 原因がはっきりわかりました。とても参考になります。 LateUpdateにすることでanimatorcontrollerがアタッチされた状態でも、 SetHumanPoseを反映させることができました。 しかし新たな問題が出てきました。 例 「Head Nod Down-Up」の数値を制御します。その後「Left Upper Leg Front-Back」の値を制御すると「Head Nod Down-Up」の値がanimatorcontrollerによって固定されたポーズに戻るようです。 例として体の部位の名前を上げましたが、値を一つ一つ更新する際はどの部位でも起こりえます。 変更した部位と値を保持して全てをLateUpdateに処理させるか、 IKの制御が終了したらanimatorcontrollerをデタッチするようにするか悩みどころですね。
Bongo

2021/10/24 07:23

なるほど...毎フレーム「Internal animation update」を通過するたびにAnimatorによる姿勢設定処理が実行されるはずですから、それを前提とした実装にする必要がありそうですね。 「変更した部位と値を保持して全てをLateUpdateに処理させる」とおっしゃるのはいい案のように感じます。別の方の「アニメーションイベントによるブレンドシェイプの挙動について」(https://teratail.com/questions/355030 )とのご質問を見かけたことがあるのですが、あの時にはDictionaryを使って設定値を管理し、LateUpdateでそれらを適用するスタイルにしてみました。 アニメーションイベントとブレンドシェイプに関する話ですので、今回のご質問者さんのケースとは状況が異なっているかもしれませんが、多少なりともご参考になる部分があるかもしれません。
user10

2021/10/28 01:49

Dictionary型であっさり解決できました。本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問