Unityで3Dゲームを作っていると、
- キャラクターに武器やアイテムを持たせたい
- キャラクターの足が地面にフィットするようにしたい
といった欲が出てきます。そんなときに便利なのがFinal IKという定番アセットなのですが、Final IKは超有名な割に使い方の情報が少ないので「セールで買ったのはいいけど使い方がよく分からん!」という方も多いのではないでしょうか。
そこでここでは
- そもそもIKとは?
- Final IKの基本的な使い方
の2点について詳しく説明していきますね。
そもそもIKとは?
まずFinal IKについて説明する前に
- そもそもIKって何?
- どうしてIKを使うの?
と思う方もいらっしゃるかもしれないので、はじめにIKについて説明しておきます。
IKについて
IKは「インバースキネマティクス(Inverse Kinematics)」の略で、日本語に訳すと「逆運動学」となります。詳しく説明すると非常に難しくなるので正確な理屈を知りたい方はぜひググって頂きたいのですが、簡単に言うとIKとは姿勢の制御方法の一種で
です。ポイントは末端の位置から途中の関節の姿勢を逆算する点で、このような求め方をするから「逆運動学」なのです(※反対のやり方としてFK:順運動学があります)。
ゲーム内でのIKの主な用途としては次のようなものがあります。
- キャラクターが武器やアイテムを自然に持てるようにする
- キャラクターの足が地面にフィットしてめり込まないようにする
- キャラクターが敵のほうを自然に向く
IK対FK:なぜゲームではIKのほうがよく使われるのか?
ところでゲームではFKよりもIKのほうがよく使われているのですが、なぜIKのほうがメジャーなのかについて少し説明しておきましょう。例としてキャラクターが目の前にあるリンゴを手でつかもうとしていると仮定し、このとき腕の関節がどういう風に動けばよいかを考えます。
まずFKの場合、根元から順番に計算してゴール(ここではリンゴ)にたどり着くような姿勢を求めます。つまり肩→肘→手首→指という順番で関節の位置や回転を計算するというわけですね。このやり方は人間の姿勢制御の方法と同じなので、本物の人間に近い動きを実現することができるというメリットがあります。
ただし欠点もあって、一発でゴールにピッタリ合うように関節を調整するのがなかなか難しいです。とりわけゲームの場合は手足などがゴールにピッタリ合ったほうが都合が良い場面が多いですし、リアルタイムで動かさないといけないので調整を何度もやり直すのはあまり得策ではありません。
そこで便利なのがIKです。IKの場合はまず手の位置をゴールのリンゴに合わせてしまって、それから途中の手首や肘の位置・回転を求めます。こうすれば途中の関節は多少調整が必要になるかもしれませんが、とりあえず末端の関節がゴール地点に合致するのでゲーム的には都合が良いのです。
このような理由からゲームではFKよりもIKのほうが多く用いられています。
Final IKの概要
さて前置きが長くなってしまいましたが、ここからが本題のFinal IKの話となります。まずUnityでのIKの扱いはどうなっているのかというと一応標準機能として搭載されています。ただし使い勝手が悪くて性能もあまりよくないので正直使っている方はほとんどいないと思います。
そのかわり、Unityには「IKといったらコレ!」というような超定番アセットが存在します。それが今回の主役であるFinal IKというアセットです。
定価だと高価なアセットではあるものの、ゲームに必要なIK関係の機能がほぼ完璧に揃っているうえに高速で使い勝手も良いので皆さんこちらを使っているようです。
Final IKの基本的な使い方
そんなFinal IKの使い方についてですが、Final IKにはIKに関する様々な機能が用意されており、全部解説すると記事がとんでもない長さになってしまうのでここでは次の3つに絞ってご説明しようと思います。
- Look At IK
- Aim IK
- Full Body Biped IK
ではそれぞれ詳しく見ていきましょう。
Look At IK
Look At IKとは?
Look At IKは、その名の通りターゲットのほうを見る動作を簡単に実現できるコンポーネントです。下のGIFのようにキャラクターの頭をターゲットの方向に滑らかに動かすことができます。
ちなみにこのコンポーネントはヒューマノイド以外のキャラクターにも使えます。
Look At IKはFinal IKの機能の中でも比較的シンプルなので、すぐに使いこなせるようになるでしょう。
Look At IKの使い方
Look At IKコンポーネントの設定項目は次のようになっています。
重要なものだけ説明すると、
- Target:キャラクターが見るターゲットのトランスフォーム(必須)
- Head:キャラクターの頭のボーン(必須)
- Spine:キャラクターの背骨のボーン(オプション)
- Eyes:キャラクターの目のボーン(オプション)
となっています。Headだけを指定した場合は頭だけが動きますが、Spineも設定すると下のGIFのように体を大きく使ってターゲットのほうを向くようになります。
また、Look At IKを使った制御をより簡単にするために、Look At Controllerというコンポーネントも付属しています。
これを使うと
- ターゲットを切り替えたときに滑らかに切り替える
- 体全体がターゲットの方向を向くようにする
といった挙動を簡単に実現できます。便利なので併せて覚えておいてください。
Aim IK
Aim IKとは?
Aim IKは銃などでターゲットを狙う場合に便利なコンポーネントです。先ほどのLook At IKと少し似ていますが、こちらは
- 手に持っている銃をターゲットの方向に向けさせる
- ターゲットに向かって剣を振る
- ターゲットに向かってパンチする
といった場合に適しています。
ただし普通にキャラクターの頭をターゲットのほうに向けさせることもできるので、場合によってはLook At IKと同じような使い方もできます。
Aim IKの使い方
Aim IKコンポーネントの設定項目は次のようになっています。
主な設定項目の意味は次のとおり。
- Target:狙いをつけるターゲットのトランスフォーム
- Aim Transform:ターゲットの方向に向けさせるゲームオブジェクトのトランスフォーム
- Bones:連動して動かすボーン
Aim Transformがちょっとわかりづらいのですが、例えば銃をターゲットに向けさせたいなら銃のトランスフォームを登録すればOKです。ただし銃のピボットなどの関係でIKを動作させると変な動きになってしまうことがあるため、その場合は銃の子として空のゲームオブジェクトを作り、それを適切な位置に調整してAim Transformに設定する必要があります。
なおAim IKにおいても、制御を簡単にするAim Contorllerというコンポーネントが別途用意されています。こちらもLook At Controllerと同じような使い方でターゲットの滑らかな切り替えや体のターンを行うことができます。
Full Body Biped IK
Full Body Biped IKとは?
Full Body Biped IKはヒューマノイドキャラクターの全身をIKで制御するための高性能なコンポーネントです。このコンポーネントを使うと、胴体・手足に
- 押す
- 引っ張る
- ねじる
といった制御を加えられるようになります。
これだけだと使いどころがよく分かりませんが、例えば他の補助的なコンポーネントと組み合わせることで
- キャラクターの足を地面に合わせて曲げる
- 落ちているアイテムを拾う
- 大きな荷物を両手で抱える
といった幅広い挙動を実現することができます。
Full Body Biped IKの使い方
導入方法については、Full Body Biped IKコンポーネントをヒューマノイドキャラクターにアタッチすれば自動的にボーンの設定が行われます(下図)。
あとはBody、Left/Right Arm、Left/Right Legの必要な部位にターゲットを設定し、Weightをいじれば手足を引っ張るなどの制御を行うことができます。
地面に合わせてキャラクターの足を曲げたい場合
また、例えば地面に合わせて足を曲げたい場合は「Grounder Full Body Biped」コンポーネントを追加でアタッチします(下図)。
「Solver」内の「レイヤー」を適切なものに変更すると、下のGIFのようにキャラクターの足が地面に合わせて曲がるようになります。
なおFull Body Biped IKはこのほかにも色々な使い方ができるので、その他の使い方についてはFinal IKのデモシーンをご覧いただければと思います。
おわりに
以上、Final IKの使い方をザックリと解説しました。Final IKはとても奥が深いアセットで全てを丁寧に説明することはできなかったのですが、ぜひ上記の内容を参考にしていただき、基本的な部分を理解していただければ十分使いこなせるようになると思います。
この記事がUnityでのゲーム開発のお役に立てば幸いです。