UnityのAnimation Riggingを使って、Live2Dモデルにリグを仕込んで動かす


はじめに

Unity2019で新たに導入されたAnimation Riggingは、Unity内で任意のオブジェクトに対してリグを設定して動かすことを可能にします。これを使うことで、Live2Dモデルを動かしてみましょう。Animation Riggingの基本的なところは、テラシュールさんを参考にして下さい。また、Live2DモデルをUnityに組み込む方法についてはLive2Dのサイトなどを参考にしてください。以下は、すでにLive2D SDKを使ってLive2DモデルをUnityに組み込んだ前提で始めます

Live2Dのアートメッシュを強制的に動かす

Live2DモデルをUnityに組み込むと、モデル名/Drawables/Artmesh...という形でアートメッシュがヒエラルキーに作られますが、それらの位置はCubism Render Controllerが制御しているため、普通にやっても変更できません。そこで、ダミーのゲームオブジェクトを作って、強制的に動かします。

今回は、腕を動かすことを考えます。Live2Dモデルとは別に、以下のオブジェクトを作ってください。全て空で良いです。

今回はWrist(手首)に相当するところはありませんが、一応つけておきます。

次に、ShoulderRootを、モデルで肩に相当するところに移動させてください。

ElbowRootも同様です。

次に、ShoulderPivotとElbowPivotに以下のスクリプトをアタッチしてください。

LateAdjuster.cs
using UnityEngine;

[ExecuteInEditMode]
public class LateAdjuster : MonoBehaviour
{
    public Transform toBeAdjusted;
    void LateUpdate()
    {
        toBeAdjusted.position = transform.position;
        toBeAdjusted.rotation = transform.rotation;
    }
}

次にインスペクタ上で、ShoulderPivotのLateAdjusterのtoBeAdjustedに上腕に相当するアートメッシュのゲームオブジェクトのTransformを、ElbowPivotのtoBeAdjustedに前腕に相当するアートメッシュのゲームオブジェクトのTransformを適用してください。

以下はShoulderPivotの例です。ArtMesh78が上腕に相当します。

すると、下の図にあるようにアートメッシュがとんでもないところに移動してしまいます。

このずれはLive2D SDKの特性によるものなので、ShoulderPivotを移動させて元の位置に戻してください。ArtMesh78のPositionを見て、その正負を入れ替えたものをShoulderPivotのPositionにすればよいです。


これで、ShoulderRootの動きが対応するアートメッシュの動きとシンクロするようになります。ShoulderPivotではないので注意してください。

Animation Riggingを使って動かす。

あとはShoulderRootとElbowRootにリグを仕込んで動かすだけです。RigRootの下に、以下のようにRig, Target, Hintという空のゲームオブジェクトを追加してください。

Targetは手のひら、Hintはひじのあたりに動かしておいてください。

次に、RigにRigコンポーネント、Two Bone IK Constraintコンポーネントをアタッチして、以下のように設定してください。

最後に、RigRootにRig Builder, Bone Rendererをアタッチして、以下のように設定してください。

これで設定は終了です。あとは、エディターを実行すればTargetの動きに追従して腕が動くはずです。