LAGライブラリを試してみるその3
予め完成したモーションではなく、ゲーム中で直接ボーンを動かしたいというときに使う命令を試してみたよ。
本家LAG氏のサイトでいうところのsample4に書かれているやつ。
命令そのものは1行で済む。(SetBoneMatrix命令)
今回使うのは、animationplayerクラスの「SetBoneMatrix」という命令。
名前からわかるとおり、ボーンの行列情報をセットするってことだ。
この命令をXNAのUpdate()関数内に書いてやる。
ちなみにカッコ内に入れる引数は、SetBoneMatrix(「ボーンの番号か名前」,「どう動かしたいかを書いた行列」 )という風になっている。
下の画像では、一旦bonechangeというmatrix変数を作りつつ、45度回転させるように数値を入れておいてSetBoneMatrixに渡したので
すこし不必要な命令も映っているけど、基本的には赤線の部分の命令だけでなんとかなるよ。
#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (source1.png)
実際にやってみると
プレイヤーがAキーを押すと腕を前へ出すようにしたかった。
これは何もしていない状態。待機モーションをしている。
#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (noble.png)
これがキーを押した後の状態。ちゃんと45度回転して、
腕が前に突き出たようになった。
#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (handmove.png)
結果
この機能が使えれば、完成モーションではできない「キャラの体は走ってる方向を向いてるけど頭は敵の方を向き続ける」
みたいなリアルタイム操作ができるようになるので、とても重要な機能だと思う。
ただし問題があって、どうやらこの命令はボーン情報が完成モーションとブレンドされてしまうらしく、実験用の管理人さんモデルが
「腕を前を突き出しつつも、肩を上下させる待機モーションも同時にやってしまっている」
というちょっと変わったことになってしまっていた。
もしLAGライブラリにボーンの手動変形時は一時的に自動モーションを切るって機能があればいいんだけど、
まだ調べられていないからできるかどうかはわからないところ。こんごの課題になりそうだ。
最終更新:2010年08月22日 20:47