IKコントロール修正
2015/04/22 Wed. 12:00 [edit]
昨日ふと気が向いたのでプレイヤーのIK挙動を修正しました。
IKって正直そこまでゲームで本質的な部分ではないのですが,
個人的にはすごく好きな要素。
簡単に言うと,地面の傾斜に合わせて足を配置したりするやつです。
(足に限った話ではありませんが)
基本的にモーションというのは平らな地面での動作を前提に作るので,
足元が凸凹だったり,階段だったりすると,
静止モーションとかで片足が浮いたりしてしまうんですよね。
慣れればそんなに気にならないんですが,
ダークソウルとかのIKはすごく気持ちがよくて,
階段とかもきちんと踏みしめて駆け上がる感が出てるし,
動かしてるだけで楽しい理由の一つだと思います。
修正というか,改良した点は次の通り。
1. 移動時に踏み出す足の着地点の高さを取得して足の位置を調整する
2. 体の重心位置をIKでずらす場合,滑らかに変化させる
1.に関しては着地したという情報はモーションに付与したeventからSendMessage的なノリで
受け取っています。この方法は足音の発生にも使ってます。
面倒なのが,足の着地時ではなく,足が地面から離れるときの動作で,
中途半端にすると,IK作用時の足の位置からIKしていないときの足の位置まで1フレームで
移動しちゃうので,カクッと足の位置が変わって不自然になります。
そこはうまいことweightを減衰させる感じでごまかしました。
ただ,移動時に足がちゃんと着地しているかなんて正直スローにしないと見えないし,
プレイヤーは足がそんなに長くないのでイマイチ有り難みがない。
ブラッドボーンみたいな足長モデルだとわかりやすいだろうけど。
言われなければだれも気づかないかもしれないことに数時間費やしたけど,
なぜかすごい達成感がある。
一方で2.はわかりやすい変化です。
静止時の足の位置調整では,段差によってはプレイヤーの足の長さが足りず,
必死に足を着地しようとしてるけど届いてないという悲しい事態に陥るので,
IKによって体の重心位置を下にシフトさせるという方法をとっています。
ここまでは前までと同じなんですが,
その重心位置の移動時が1フレームで起こっていたので,
滑らかにしたという感じです。
なかなかいい感じに重心を移動してくれました。
満足満足。
ところで,
就活で自分のゲームのソースを送ることも場合によってはあるようなのですが,
Debug.Log("きたよ!!!!");
Debug.Log("私が犯人です");
とかふざけた感じでデバッグしまくってたので,全部消すべきかすごい迷ってます。
(量がすごい)
IKって正直そこまでゲームで本質的な部分ではないのですが,
個人的にはすごく好きな要素。
簡単に言うと,地面の傾斜に合わせて足を配置したりするやつです。
(足に限った話ではありませんが)
基本的にモーションというのは平らな地面での動作を前提に作るので,
足元が凸凹だったり,階段だったりすると,
静止モーションとかで片足が浮いたりしてしまうんですよね。
慣れればそんなに気にならないんですが,
ダークソウルとかのIKはすごく気持ちがよくて,
階段とかもきちんと踏みしめて駆け上がる感が出てるし,
動かしてるだけで楽しい理由の一つだと思います。
修正というか,改良した点は次の通り。
1. 移動時に踏み出す足の着地点の高さを取得して足の位置を調整する
2. 体の重心位置をIKでずらす場合,滑らかに変化させる
1.に関しては着地したという情報はモーションに付与したeventからSendMessage的なノリで
受け取っています。この方法は足音の発生にも使ってます。
面倒なのが,足の着地時ではなく,足が地面から離れるときの動作で,
中途半端にすると,IK作用時の足の位置からIKしていないときの足の位置まで1フレームで
移動しちゃうので,カクッと足の位置が変わって不自然になります。
そこはうまいことweightを減衰させる感じでごまかしました。
ただ,移動時に足がちゃんと着地しているかなんて正直スローにしないと見えないし,
プレイヤーは足がそんなに長くないのでイマイチ有り難みがない。
ブラッドボーンみたいな足長モデルだとわかりやすいだろうけど。
言われなければだれも気づかないかもしれないことに数時間費やしたけど,
なぜかすごい達成感がある。
一方で2.はわかりやすい変化です。
静止時の足の位置調整では,段差によってはプレイヤーの足の長さが足りず,
必死に足を着地しようとしてるけど届いてないという悲しい事態に陥るので,
IKによって体の重心位置を下にシフトさせるという方法をとっています。
ここまでは前までと同じなんですが,
その重心位置の移動時が1フレームで起こっていたので,
滑らかにしたという感じです。
なかなかいい感じに重心を移動してくれました。
満足満足。
ところで,
就活で自分のゲームのソースを送ることも場合によってはあるようなのですが,
Debug.Log("きたよ!!!!");
Debug.Log("私が犯人です");
とかふざけた感じでデバッグしまくってたので,全部消すべきかすごい迷ってます。
(量がすごい)
スポンサーサイト
category: ゲーム