13
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

FinalIKでキャラクターに思いのままにインタラクションさせる方法

Last updated at Posted at 2020-02-24

使用アセット

Final IK

Final IK
https://assetstore.unity.com/packages/tools/animation/final-ik-14290

背景

Fantasy Forest Environment
https://assetstore.unity.com/packages/3d/environments/fantasy/fantasy-forest-environment-34245

モデル

京狐
https://booth.pm/ja/items/1826902

アニメーション

Magician-Motion Pack
https://assetstore.unity.com/packages/3d/animations/magician-motion-pack-133515

インタラクションの参考

Final IKインタラクションのチュートリアル
https://www.youtube.com/watch?v=r5jiZnsDH3M

足を接地

Sceneに配置したモデルにFull Body Biped IKを設定
※基本的には自動で設定されるがモノによっては設定が上手くいかないものがある。
01.png

上手く設定できるとこんな感じになる
02.png

床用のレイヤーを追加し、接地させるようのメッシュにレイヤーを設定する。
今回はGroundレイヤーを追加し、地面に設定した。
03.png

Grounder Full Body Bipedをモデルにアタッチする。
Grounder Full Body BipedのIKにFull Body Biped IKをアタッチする。
Solverを開き、Layersに接地用レイヤーを設定する。今回はGroundを追加した。
04.png

設定するとこんな感じになる。
01.gif

IKだけでオブジェクトに片手を触れて放す

アイドルモーション用に使っていたAnimatorコンポーネントをオフにする
05.png

オブジェクトにInteractionObjectをアタッチ
06.png

Weight Curvesを追加しTypeはPosition Weightを選ぶ
Curvesは(Time,Value)でKeyを(0, 0) > (0.5, 1) > (1, 0)と設定した。
※0秒から0.5秒にかけて目標座標に到達し、0.5秒から1秒にかけて元に戻るようなカーブです。
07.png

インタラクションさせるモデルにInteractionSystemをアタッチする
Full Bodyにはモデルに設定したFull Body Biped IKを設定する
08.png

InteractionSystemTestGUIをアタッチする
※ゲームビューにInteractionSystemを実行するためのボタンが追加されます。

FinalIKの動作テスト用に同梱されたスクリプトであり、任意のタイミングでインタラクションするにはスクリプトの修正が必要です。
Interaction ObjectにInteraciton Objectをアタッチしたのを設定する
Effectorsを増やしRight Handを選択する
※これで右手にInteractionを適用することができる
09.png

動かすとこんな感じ
4.gif

IKだけでオブジェクトに両手を触れて放す

上の章(IKだけでオブジェクトに片手を触れて放す)で紹介した工程をしたあとに
InteractionSystemTestGUIのEffectorsを増やし
RightHandとLeftHandを設定するだけです。
11.png

動かすとこんな感じ
7.gif

IKだけでオブジェクトに片手を触れ続ける

上の章(IKだけでオブジェクトに片手を触れて放す)で紹介した工程をしたあとに
Interaction ObjectのEventsを追加し
Timeを0.5
Pauseにチェックを入れる
10.png

動作としてはWeightCurvに従って0.5秒かけてオブジェクトに手を近づけ、
Evetntsで設定されたPauseが呼ばれる動作です
Curvを伸ばし、Timeを調整することでタイミングを調整できます。

動かすとこんな感じ
5.gif

IKだけでオブジェクトに両手で触れ続ける

上の章(IKだけでオブジェクトに片手を触れ続ける)で紹介した工程をしたあとに
InteractionSystemTestGUIのEffectorsを増やし
RightHandとLeftHandを設定するだけです。
11.png

動かすとこんな感じ
6.gif

IKだけでオブジェクトを片手で掴む

上の章(IKだけでオブジェクトに片手を触れて放す)で紹介した工程をしたあとに
12.png
動かすとこんな感じ
8.gif

掴むオブジェクトの回転をモデルのボーンに適用する

Interaction ObjectのMultipliersを追加し以下のように設定する
Curve:Position Weight
Multiplier:1
Result:Rotate Bone Weight
13.png
動かすとこんな感じ
9.gif
MultiPliersのCurveはWeight Curveで指定したCurveから選ぶ

オブジェクトに手の位置を合わせる

モデルを複製し、複製したモデルの手(Hand)をオブジェクトの置きたい座標に移動させる
※この時手が伸びてるように見えるが問題はない
14.png
複製した手を置きたいオブジェクトの子階層に配置する
15.png
コピーしたモデルは削除してよい
オブジェクト直下に配置したHandにInteractionTargetをアタッチし以下のように設定
EffectType:RightHand
※合わせるのに使用した部位を選ぶ
16.png
動かすとこんな感じ
10.gif

ポジションはあってるが回転があってないのでWeight Curveを追加し、Rotation Weightを追加する
17.png
動かすとこんな感じ
11.gif

オブジェクトに指の位置を合わせる

モデルの合わせたい指がある手(Hand.R)にHandPoserをアタッチ
18.png

調整するときはゲームを再生し、IK適用後にオブジェクト直下に配置してるHandの指を動かす
12.gif

調整したHandオブジェクトをコピーして再生を終了する
コピーしたオブジェクトに置き換える

位置によって手首がねじれるのでオブジェクトのInteractionTargetに
Pivot:インタラクションするオブジェクト
※再生中にTwistAxisを調整してコピペして角度合わせるのも有効
Rotate Once:チェックをつけると常に角度が修正されるようになる
19.png

動かすとこんな感じ
13.gif

手を動かすときのY座標のオフセットを指定する

オブジェクトのInteractionObjectのWeightCurvを追加する
Y座標のオフセットを修正する際にはPosition OffsetYにする
Curvesは(Time,Value)でKeyを(0, 0) > (0.25, 1) > (0.5, 0)と設定した。
※0秒から0.25秒にかけてオフセットのYに到達し、0.25秒から0.5秒にかけて目的座標に戻るようなカーブです。
20.png

動かすとこんな感じ
14.gif

手を動かすときの腕の伸ばし具合のオフセットを指定する

オブジェクトのInteractionObjectのWeightCurvを追加する
腕の伸ばし具合のオフセットを修正する際にはReachにする
沢山伸ばしたい場合はValueを0に近づける
21.png
調整するときは再生してコピペでCurveを設定する
16.gif
Pauseを0.5としてるので
Curvesは(Time,Value)でKeyを(0, 0) (0.5, 0.08)と設定した。
動かすとこんな感じ
15.gif

13
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?