■Full Body Biped IK - Linking Effectors to Objects
*前回の内容と似ているが、この回では簡単なスクリプトを書く- Full Body Biped IKをアタッチ(厄介なことに動画のinspectorは旧式)
- Cubeを配置し、コライダーを削除する
- ゲームをいったん再生状態にする
- 右手と左手のEffectorのWeight PositionとRotationを1にする
- 箱を持った状態になるよう、手の位置や角度を調整する
- Full Body Biped IKにより手の位置は固定できているが、指の位置は固定できない
そこで、手の調整が終わったらゲームの再生を一時停止にする- 重要なのはAnimatorの非アクティブなので、こちらはあまり気にしなくてよい
- このとき、Animatorを非アクティブにしないと調整できない(Animatorに上書きされる)
- この状態で指のボーンを調整する(ゲームの再生をやめれば元に戻る)
- 調整が終わったら、両手をコピーする
- ゲームの再生を終える
- ボーンの調整はかなり時間のかかる作業なので、前回同様キャラクターを複製して編集したほうが無難に思う
- コピーした両手をCubeの子オブジェクトにする
- 位置情報のみで視覚的には何も表示されない
スクリプトの作成
- 名前区間にusing RootMotion.FinalIK;
- 作成したスクリプトをキャラクターにアタッチ
- 指先を再現するためには、同梱されている「Hand Poser.cs」をアタッチし、Pose RootにCubeの対応する手の子オブジェクトを指定する
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using UnityEngine; | |
using System.Collections; | |
using RootMotion.FinalIK; | |
public class HoldCube : MonoBehaviour { | |
public FullBodyBipedIK ik; | |
public Transform leftHandTarget, rightHandTarget; | |
// Update is called once per frame | |
void LateUpdate () { | |
//左手 | |
ik.solver.leftHandEffector.position = leftHandTarget.position; | |
ik.solver.leftHandEffector.rotation = leftHandTarget.rotation; | |
ik.solver.leftHandEffector.positionWeight = 1f; | |
ik.solver.leftHandEffector.rotationWeight = 1f; | |
//右手 | |
ik.solver.rightHandEffector.position = rightHandTarget.position; | |
ik.solver.rightHandEffector.rotation = rightHandTarget.rotation; | |
ik.solver.rightHandEffector.positionWeight = 1f; | |
ik.solver.rightHandEffector.rotationWeight = 1f; | |
} | |
} |
0 件のコメント:
コメントを投稿