きっポグ

- kitposition's weblog -

【Unity】unityroom 1週間ゲームジャム出品作「こはくちゃんズのファイアごっこ!!」を解剖してみる~その2

 前回に続き、Unityゲーム投稿サイト「unityroom」さんの「1週間ゲームジャム」への出品作「こはくちゃんズのファイアごっこ!!」で使ったUnityの機能についてご紹介します。ゲームはunityroomで公開中なので、ぜひ遊んでみてください。

「こはくちゃんズのファイアごっこ!!」

f:id:kitposition:20170503120833p:plain

 今回は、このゲームで使用しているアセットの1つ「Final IK」についてご紹介します。価格は90$とお高いんですが(僕は半額セールの時に買いました)、それに見合った機能を持つオススメアセットです!

 (本記事執筆時点のバージョン:Unity 5.6.0f3)

 

UnityのIK機能を拡張する 「Final IK」

 IKは「Inverse Kinematics」の略で、3Dモデルのモーションを制御する方法の1つです。このブログで3Dモーション作成ソフト「akeytsu」をご紹介した時に説明していますので、そのまま引用します。

3Dモデルの、特に手足のポージングの際には、「FK(Forward Kinematics)」と「IK(Inverse Kinematics)」の2通りの方法があります。 説明しだすと結構奥深いのですが、正確さを追求せずにごく大雑把に言うと、下の1番目の動画がFK、2番目の動画がIKです。 FKとは、動かしたい部分の根元の関節から先端の関節に向けて順番に動かすことで(動画の例では肩→ひじ)望みのポーズをとらせる方法です。 FKでは全ての関節をユーザー(ポーズ作成者)の希望の位置に動かすため、正確なポージングが可能ですが、反面「木になっているリンゴをつかむ」というポーズをさせたい場合、この方法で手をぴったりとリンゴの位置まで持っていくのはかなり面倒な作業になることは想像できるかと思います。 対するIKは2番目の動画のように、動かしたい部分の先端を希望の位置(目標)に向けて動かすと、根元までの関節は勝手に計算されて動くというしくみです(動画の例では手首をつかんで動かした)。 IKはある意味ポーズがコンピューター任せになるので、必ずしもイメージ通りにならないケースもあるのですが、先ほどのリンゴの例のように「細かいことはいいから、とにかくリンゴ(目標)をつかませたい」という時にはとても有効です。

3Dキャラクターモーション作成ツールの新星「akeytsu」に(ちょっと)迫る ~その2:UI編Part2 - きっポグ

  

 この時は「akeytsu」での解説でしたが、Unityでも話は同様です。で、Unityには標準でIK機能が搭載されています。まずはそっちを試してみましょう!

Unityの標準IK機能を試す

 標準IKはAnimatorクラスに用意された各種のメソッドで制御しますが、ここではとりあえず公式マニュアルのサンプルコード(IKContlol.cs)をそのままユニティちゃんにアタッチします。*1

 標準IKは両手足と視線を制御できますが、このサンプルではRightHandObj(右手で触れたいターゲット)とLookObj(視線を合わせたいターゲット)を設定可能なので、ステージに立たせたユニティちゃんの目の前に適当なSphereを置き、これをターゲットとしてインスペクタから設定、Ik Activeのチェックをオンにします。

f:id:kitposition:20170503125337p:plain

 実行してみると…

 と、ユニティちゃんの右手と視線がSphereに向き、お互いを動かして位置関係を変えても腕が動いて追随してくれます。このように、いちいち動きをデザインしなくても対象物を決めるだけで勝手にポーズを決めてくれて、位置関係が変わっても追随してくれるのがIKです。凄い!

 

Final IKを試す

 ではいよいよFinal IKです。FInal IKは名前の通りIKの決定版という感じで、「2本足用」「4本足用」「射撃モーション用」など様々なIKコンポーネントが含まれているのですが、まずは先ほど試した公式サンプルと同等の機能を持つ「Biped(2本足用)IKコンポーネントを見てみましょう。

f:id:kitposition:20170503131543p:plain

 設定項目多いよw
 実のところ、これらの設定項目の意味やどう設定するといい感じになるかは僕も試行錯誤の最中なので説明は割愛しますが、とりあえず僕なりにいい感じに思えるようにパラメーターを弄ったのち、公式サンプル同様に右手と視線にターゲットを設定します。
 下の動画ではわかりやすいように、先ほどの標準IK版とBied IK版のユニティちゃんを並べてみました。それぞれ目の前の棒の端にあるSphereをターゲットにしています。

 それでは実行!

(左:標準IK 右:Final IKの「Biped IK」)

 いかがでしょうか?標準IKはあくまで右腕のみの動きのため、腕が胴体にめり込んでしまう場面もありますが、Biped IKでは上半身全体が動くためにより自然な挙動になっているのがわかると思います。(もしかすると自分が知らないだけで標準IKもうまく調整すればより自然な動きになるのかもしれませんが、Biped IKはとりあえずアタッチして適当につまみを弄るだけで自然な動きになるのでとても簡単です。)

 …て、「まあ自然は自然だけどそんなに変わらないんじゃないか」って思いましたか?それでは今度はFinal IKの別コンポーネント、「Full Body Biped IK」を試してみましょう。

f:id:kitposition:20170503135457p:plain

 「Full Body Biped IK」コンポーネントはさっきの「Biped IK」と違ってなぜか視線のIKが含まれていませんが、Final IKには視線専用の「Look At IKコンポーネントもあるので一緒につけました。パラメーターを調整、ターゲットを設定して実行します。

(左:標準IK 右:Final IKの「Full Body Biped IK」)

 何ということでしょう!Full Body Biped IKを設定した右のユニティちゃんは、文字通り全身をフルに使ってIKしちゃってます!もちろん、どの部位をどの程度追随させるか等、パラメーターで細かい調整が可能になっています。これは凄い!

 

 Final IKをゲームに使ってみた!

 Final IKをほんの一部分だけご紹介しましたが、標準IKにしろFinal IKにしろ、アニメーションとは別の角度でキャラクターに生き生きとした動きを与えることができます*2。また、ゲームのようにキャラクターや対象物の位置が刻々と変わる場合に全てに対応するモーションを制作するのは不可能ですが、IKを使うことでこの問題を解消できます。モーション作りはゲーム制作者にとってモデリングと同様にハードルが高い部分ですが、基本となるモーションを用意しておいてIKで調整する、というのは非常に現実的な選択肢でしょう。

 …と、いう訳なのですが、今回僕がゲームジャムに投稿した「こはくちゃんズのファイアごっこ」、一体どこにFinal IKを使う必要があるんだ?と賢明な読者の方は不思議に思うかもしれません。
 でもちゃんとFull Body Biped IKを使っているんです!

f:id:kitposition:20170503142959p:plain
これの

 

f:id:kitposition:20170503143013p:plain
ここの

 

f:id:kitposition:20170503143413p:plain

ここに!

 細かすぎて伝わらねーよ!

 …と、まあこの例の場合はゲーム中にキャラクターと担架の相対的な位置関係が変わるわけでもなく、IKなど使わなくてもいくらでも方法はあるというか、普通にポーズを決めればいいだけなんですが、すみませんめんどくさかったんです。IK使うとてっとり早いんだもの…

 あと、キャラクターの視線の制御にもLook At IKを使っていて、ミスしてユニティちゃんが地面に落ちた瞬間に担架を持つ2人がギョッとしてユニティちゃんの方を見るとか、全くどうでもいい演出に利用しています。しかもパラメーター調整が未熟であまりうまくいっていないというw

f:id:kitposition:20170503144152p:plain

 

Final IKのその他の機能もちょっとだけ

 Final IKには今回ご紹介した以外にもたくさんの機能がありますが、個人的にお気に入りは「Interaction System」というやつで、これを使うとゲーム中にプレイヤーの操作でIKを発動できます。またターゲットがキャラクターに一定以上近づいたときにのみ発動、更にはただターゲットにさわるだけでなく指1本1本の関節を調節して掴む、持ち上げる、投げる等様々なことが可能になります。

 現在鋭意制作中のスマホアプリ「ユニティちゃんと魔法使いの家」ではこの機能を全面的に使用しているので、最後に宣伝を兼ねて1シーンだけご紹介します。シーン自体は、以前ご紹介した別のアセット「Cinema Director」を使って制御しています。

 プレイヤーの操作で両手のIKが発動し、ユニティちゃんが謎のレバーを引っ張りますが、両手がレバーをきっちり掴んでいることがお分かりいただけるでしょうか?ユニティちゃんには気の毒ですがこのレバーはある仕掛けを解かないことには一生動かないんですけどねw それができるかどうかはプレイヤーの皆さん次第です。リリースをお楽しみに!

 

最後に

 今回は「こはくちゃんズのファイアごっこ!!」に使用したアセット「Final IK」をご紹介しましたが、他にもゲームオーバーのシーンで上記の「Cinema Director」を使ったり結構色々やっています。アセットを使うと楽しい表現を時間をかけずにつくることができるので、これからもうまく使っていきたいと思います。それでは次の更新はまた気が向いたころ、多分1年後くらいに!(ヲイ

 

*1:IKはアニメーションとは独立した機能なので、ユニティちゃんのプレハブを使う場合、初めからついているAnimatorや制御スクリプト類はつけたままでOKです。

*2:この記事でご紹介した動画のユニティちゃんは、全てアニメーションとしては同梱されている「Standing@loop(立ちモーション)」が適用されているだけです