#使用アセット
##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を設定
※基本的には自動で設定されるがモノによっては設定が上手くいかないものがある。
床用のレイヤーを追加し、接地させるようのメッシュにレイヤーを設定する。
今回はGroundレイヤーを追加し、地面に設定した。
Grounder Full Body Bipedをモデルにアタッチする。
Grounder Full Body BipedのIKにFull Body Biped IKをアタッチする。
Solverを開き、Layersに接地用レイヤーを設定する。今回はGroundを追加した。
#IKだけでオブジェクトに片手を触れて放す
アイドルモーション用に使っていたAnimatorコンポーネントをオフにする
Weight Curvesを追加しTypeはPosition Weightを選ぶ
Curvesは(Time,Value)でKeyを(0, 0) > (0.5, 1) > (1, 0)と設定した。
※0秒から0.5秒にかけて目標座標に到達し、0.5秒から1秒にかけて元に戻るようなカーブです。
インタラクションさせるモデルにInteractionSystemをアタッチする
Full Bodyにはモデルに設定したFull Body Biped IKを設定する
InteractionSystemTestGUIをアタッチする
※ゲームビューにInteractionSystemを実行するためのボタンが追加されます。
FinalIKの動作テスト用に同梱されたスクリプトであり、任意のタイミングでインタラクションするにはスクリプトの修正が必要です。
Interaction ObjectにInteraciton Objectをアタッチしたのを設定する
Effectorsを増やしRight Handを選択する
※これで右手にInteractionを適用することができる
#IKだけでオブジェクトに両手を触れて放す
上の章(IKだけでオブジェクトに片手を触れて放す)で紹介した工程をしたあとに
InteractionSystemTestGUIのEffectorsを増やし
RightHandとLeftHandを設定するだけです。
#IKだけでオブジェクトに片手を触れ続ける
上の章(IKだけでオブジェクトに片手を触れて放す)で紹介した工程をしたあとに
Interaction ObjectのEventsを追加し
Timeを0.5
Pauseにチェックを入れる
動作としてはWeightCurvに従って0.5秒かけてオブジェクトに手を近づけ、
Evetntsで設定されたPauseが呼ばれる動作です
Curvを伸ばし、Timeを調整することでタイミングを調整できます。
#IKだけでオブジェクトに両手で触れ続ける
上の章(IKだけでオブジェクトに片手を触れ続ける)で紹介した工程をしたあとに
InteractionSystemTestGUIのEffectorsを増やし
RightHandとLeftHandを設定するだけです。
#IKだけでオブジェクトを片手で掴む
上の章(IKだけでオブジェクトに片手を触れて放す)で紹介した工程をしたあとに
動かすとこんな感じ
#掴むオブジェクトの回転をモデルのボーンに適用する
Interaction ObjectのMultipliersを追加し以下のように設定する
Curve:Position Weight
Multiplier:1
Result:Rotate Bone Weight
動かすとこんな感じ
MultiPliersのCurveはWeight Curveで指定したCurveから選ぶ
#オブジェクトに手の位置を合わせる
モデルを複製し、複製したモデルの手(Hand)をオブジェクトの置きたい座標に移動させる
※この時手が伸びてるように見えるが問題はない
複製した手を置きたいオブジェクトの子階層に配置する
コピーしたモデルは削除してよい
オブジェクト直下に配置したHandにInteractionTargetをアタッチし以下のように設定
EffectType:RightHand
※合わせるのに使用した部位を選ぶ
動かすとこんな感じ
ポジションはあってるが回転があってないのでWeight Curveを追加し、Rotation Weightを追加する
動かすとこんな感じ
#オブジェクトに指の位置を合わせる
モデルの合わせたい指がある手(Hand.R)にHandPoserをアタッチ
調整するときはゲームを再生し、IK適用後にオブジェクト直下に配置してるHandの指を動かす
調整したHandオブジェクトをコピーして再生を終了する
コピーしたオブジェクトに置き換える
位置によって手首がねじれるのでオブジェクトのInteractionTargetに
Pivot:インタラクションするオブジェクト
※再生中にTwistAxisを調整してコピペして角度合わせるのも有効
Rotate Once:チェックをつけると常に角度が修正されるようになる
#手を動かすときの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秒にかけて目的座標に戻るようなカーブです。
#手を動かすときの腕の伸ばし具合のオフセットを指定する
オブジェクトのInteractionObjectのWeightCurvを追加する
腕の伸ばし具合のオフセットを修正する際にはReachにする
沢山伸ばしたい場合はValueを0に近づける
調整するときは再生してコピペでCurveを設定する
Pauseを0.5としてるので
Curvesは(Time,Value)でKeyを(0, 0) (0.5, 0.08)と設定した。
動かすとこんな感じ