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 3 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?