これは結構いろんな方法がありそうで、そのうえ人間のモーションとなると、検索してもスキンメッシュアニメーションの情報ばかりがひっかかって難しそうですね...
ご質問者さんの挙げられた1つ目のサイトで紹介されているパターンでは、ジョイントは使わずに各部位のパラメーターとして与えるオイラー角に制限を持たせているようですね。
膝のようなほぼ1方向にしか回転しない関節はHingeJointを使って、さらにデフォルトの状態だと重力に負けてくずおれるでしょうから、Use SpringをオンにしSpringに大きな値を入れて強力な角度拘束を働かせ、関節の回転はTarget Positionをスクリプトから操作するというのはどうでしょう。
自由度の大きい関節は複数のHingeJointを組み合わせるか、ConfigurableJointを使うとかでしょうか?
ただ、ちょっと試した感じではTarget Positionの操作による回転では(Rigidbodyのrotation操作でも同じく)ジョイントのLimits設定を無視するようなので、角度制限を持たせるには結局スクリプト上でLimitsを参照し、角度をClampで範囲内におさめるなどの工夫が必要そうです。
それにしても二足歩行はかなりやっかいですね。ご質問者さんの挙げられたサイトを真似て、HingeJointを使った二足歩行に挑戦したものの、まともに立たせることすらできませんでした...
重心のズレを検知して上半身を傾けたり、傾いた方向に足を出させるような機構を実装してちゃんと歩けるようにしてからでないと、GA等で動きを最適化しようにも、そもそも成績を評価できなさそうです。
この辺はUnity向けの情報にこだわらず、もっと一般的な歩行シミュレーションだとか、二足歩行ロボットの制御に関する論文を探すのがいいのではないでしょうか。
※インチキですが、体幹部分のFreeze RotationをXYZ全部オンにしたら、足を適当に動かすだけでもある程度前進してくれました。これはこれで使い道があるかもしれません。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/08/08 12:49