FinalIKの基本と応用

この記事はUnity アセット真夏のアドベントカレンダー 2018 Summer!の16日目の記事です。

使用したバージョン

Unity 2018.1.7f1 & FinalIK 1.7

FinalIKについて

FinalIKは、IKに関する挙動を自然に制御できる、とても便利なアセットなのです。

なかけん

ネコさん

本日はよろしくお願いします!ところで、IKって何ですか?
IKとは?
IK制御がとてもラクにおこなえるFinalIK。特徴的な機能のひとつにVRIKというものがあります。VRコンテンツの制作に特化していて、

昨今のVtuber界隈においては多くの開発者の方が利用しているようです。

なかけん

ネコさん

なるほど、とても有能なアセットなんですね!

概要

FinalIKは、様々なシチュエーションに対応した高品質のIKシステムを扱う事ができるアセットです。モバイルでも十分軽快に動作し、VTuber向けの開発でも大活躍するなど非の打ち所がありません。

本記事では、そんなFinalIKのLimb IK、Aim IKを使った基本と応用について解説いたします。

アセットの準備

● FinalIKのDLとインポート

  • STEP.1


    Final IK

    FinalIKをAssetStoreからダウンロードし、インポートします。

  • STEP.2

    インポート直後はこのようになっています。Pluginsディレクトリの下にインポートされます。

    Plugins内が既に他のアセットでごちゃごちゃしてたりすると、FinalIKのデータがどこにあるのか分かりづらくなるので、注意して下さい。

これで、FinalIKを使う準備は整いました!

なかけん

● サンプルモデル以外のモデルデータを使う

FinalIKにはデモ用としてサンプルモデルが内包されています。今回は応用する方の為に、それらのキャラモデルは使わない方向で進めていきたいと思います。

使用するモデルはこちら(Freeで使えます)

ネコさん

このモデル、どこか見覚えがある気がするんですが。
なぜだか無性に、ショッピング意欲を刺激してくるデザインだね。

なかけん

Limb IK

Limb IKはFinalIKの基本IKの一つです。Limbは「脚」を意味し、「ふともも」「ふくらはぎ」「足の甲/かかと」までを範囲として扱うIKです。

FinalIKで使われている基本語句のざっくりとした説明
  • Weight:  該当する骨(またはIK全体)が受け持つ、影響力や効力の強さ。
  • Pole:  向きに関する制御が関係するものはPoleという名前が付きます。
  • Target: この名前が付くオブジェクトが基本、開発者側で移動操作する対象となります。Effecterという名前だったりする事もあります。

● Limb IKを使ってみる

  • STEP.1
    オブジェクトの設置

    キャラクターをHierarchy(シーン内)に配置しましょう。次に、適当にSphereを2つ、Createしましょう。

    ここでは黄色いSphereを「Target」、緑色のSphereを「Bend Goal」と名付けました。

    Target はキャラのかかとあたりに。Bend Goalは、ひざ正面から前に押し出した位置に設置しましょう。

  • STEP.2
    Limb IKのアタッチ

    キャラクター(MaleFree1)を選択して、Add Componentから「Limb IK」を選んでアタッチしましょう。

  • STEP.3
    各設定項目を埋める

    Limb IKの中の未設定項目を埋めていきます。

    Bone 1にはThigh(ふともも)、Bone 2にはCalf(ふくらはぎ)、Bone 3にはFoot(足の甲/かかと)を設定します。

    Targetには、黄色いSphere「Target」を設定しましょう。

    最後にBend Modifierのプルダウンメニューから「Goal」を選択して、そこで現れたBend Goalに緑のSphere「Bend Goal」を設定します。

  • STEP.4
    再生して確認

    このまま再生をすると、かかとの向きがおかしな方向に向いた状態になってしまいます。Targetの持つ向きの情報を修正しましょう。

  • STEP.5
    Targetの向きを調整する

    黄色いSphereのTargetが持つTransform内のRotation情報を(x:0 y:90 z:90)に変更しました。

    これで、シーンを再生してもキャラクターの足が変な方向に向かなくなります。

  • STEP.6
    動きを確認する

    これでキャラクターにLimb IKの機能が付きました。このIKを使うと例えば、「キャラをスクワットさせる」「動く台座でバランスゲーム」などの動きが付けられるようになります。是非試してみて下さい。

スクワットといえば、自宅でできる運動の代名詞だよね。

ネコさんは、家で何か運動するの?

なかけん

ネコさん

最近はもっぱら、ファミリートレーナーで走ってますね。
ファミリートレーナーとか渋すぎでしょ

なかけん

Aim IK

Aim IKはFinalIKの中でもっともゲーム向けな機能となります。Aim IKは、「対象物 A」に対して、「対象物 B」のある位置へ、「対象物 A」を向かせる為の機能です。

● Aim IKを使ってみる

  • STEP.1
    1からセットアップ

    Limb IKの時と同様に、新しくシーンを作ってから再びキャラクターをHierarchy(シーン内)に配置しましょう。

    今度はSphereを3つ、Createしましょう。ここでは黄色いSphere2つをそれぞれ「Target01」「Target02」とし、緑色のSphereを「Pole Target」と名付けました。

    このままの状態だと、見た目が地味過ぎな為にAim IKをつけても、その効果が視覚的に分かりにくいかもしれません。

    Aim IKを使ってる事がわかりやすい、手持ちアイテムを追加しようと思う。

    なかけん

    ネコさん

    はあ、アイテムですか。それは一体、何でしょうか?
    チャカ

    なかけん

    !!?

    ネコさん

    チャカきたっ!

    アイテムを持たせよう

    Plugins/RootMotion/Shared Demo Assets/Props/Prefabs の階層に、「MP-40」というPrefabがあります。これをシーン内に、ドラッグ&ドロップしましょう。

    MP-40をキャラクターの右手に持たせましょう。

    キャラクターの右手はR_Handですので、キャラクターの階層を潜ってR_Handに該当するボーンを探します。

    basic_rig R Hand」というボーンを見つけたので、MP-40をその下に移動します。

    この時、MP-40が持つローカルなPositionとRotationの値を調整しましょう。細かいですが、Position (X: 0.0084  Y: 0 Z: -0.0013)、Rotation (X: 0.602 Y: 0 Z: 0)あたりがちょうど良いと思います。

    ネコさん

    顔と手に持っている物とで、ミスマッチ感がすごいですね…
    やさしい殺し屋さんって感じだね。

    なかけん

  • STEP.2
    Aim IKとAim Controllerのアタッチ

    キャラクター(MaleFree1)を選択した状態で、Add Componentから「Aim IK」を選んでアタッチします。

    続けて、再びAdd Componentから「Aim Controller」を選んでアタッチします。

  • STEP.3
    各設定項目を埋める

    Aim IK、Aim Controllerの未設定項目を埋めていきます。

    Aim IKの「Target」は、空欄のままで良いです(Aim Controller側で制御するので)。

    Pole Target」に緑色のSphereのPoleTargetを設定します。

    Aim Transform」には、チャカであるMP-40の階層下(子)に存在する「AimTransform」を設定しましょう。

    Axis」はX: 0、 Y: -1、 Z: 0にして、「Pole Axis」はX: 0、 Y: 0、 Z: 1に設定しましょう。「Weight」は0のままで大丈夫です。「Pole Weight」は1にしておきましょう。

    いくつか飛ばして、「Bones」の設定です。「+」ボタンを全部で3回クリックして、スロットを3つに増やしましょう。

    スロットの一番上にキャラクターのボーン「basic_rig Spine」、スロット真ん中に「basic_rig Spine1」、スロット一番下に「basic_rig R Clavicle」を指定するようにしましょう。それぞれのWeightも上と真ん中が「0.5」、一番下が「1」となるようにしてください。

    次にAim Controllerです。「IK」には自身にアタッチされているAim IKを指定します。(インスペクターからAim IKコンポーネントをドラッグして指定するのがわかりやすい)

    Weight」は1にします。「Target」を黄色いSphereのTarget01に指定します。残りは初期設定のままで大丈夫です。

  • STEP.4
    再生して確認

    エディターを再生すると、キャラクターが指定したターゲットにチャカを向けているのがわかります。

  • STEP.5
    Aim Controllerを使ってターゲット変更

    Aim IKで単純にTargetを変える場合。例として、ターゲットを”A”→”B”に変えた場合だと、ターゲットの変更途中のアニメーション動作が、たった1フレームで完了してしまいます。これだと、なんだか味気ないですよね。

    Aim Controllerなら、Targetを動的に変更した場合でも、間の動きを補完してくれます。

    また「Target Switch Smooth Time」と「Weight Smooth Time」を調節することで、ターゲット変更時の切り替え速度をコントロールすることができます。

    ターゲット対象が素早く動いたときに照準を合わせるまでのラグなんかは、この機能を使って再現することができます。

まとめ

FinalIKを使うと、ゲームの状況に応じてキャラクターに動的かつ自然な振舞いをさせる事が出来るようになります。

スケルトン規格(仕様)がバラバラであっても、FinalIKは柔軟に仕様に合わせることが出来、問題解決できる仕組みがしっかり用意されています。

この柔軟性の高さがFinalIKの強味なのです。ダイナミックで新しい面白さを追求したい方に是非、FinalIKをおすすめしたいです。

ネコさん

このCharacter Packのキャラクター、やっぱりどこかで見た覚えがあるんですが…
そうだね。確かに見覚えがあるかもしれないけど、どうしても思い出せない。

なかけん

ネコさん

うーん。謎は、深まるばかりですね。

明日(8/17)のアドカレ記事は kfactoryさんの「Game Data Editorの紹介とsimple SQLつかってみたり」です。僕もGame Data Editorは重用しているので、とても楽しみです。