視線追従の設定

最終更新: 2020年1月30日

ここでは、モデルの視線などをマウスカーソルに追従させる方法を説明します。

概要

視線の追従を設定するには、Cubism SDKでは、 Lookat というコンポーネントを利用します。

SDKにはこのコンポーネントを使った[LookAt]というサンプルシーンが同梱されておりますので、そちらもあわせてご覧ください。
こちらはモデルの頭上を回るGameObjectの位置を視線で追従するサンプルとなっております。
/Assets/Live2D/Cubism/Samples/Lookat

Lookatを設定するには、以下の3つを行ないます。

  1. Lookatを管理するコンポーネントのアタッチ
  2. 追従させるパラメータの指定
  3. 視線を追従させる対象の設定

Lookatを管理するコンポーネントのアタッチ

モデルのルートとなるGameObjectに、視線追従を管理するCubismLookControllerというコンポーネントをアタッチします。

CubismLookControllerには、設定項目が4つあります。

– Blend Mode:視線追従させる際に変動する値をパラメータにどう反映するかの設定です。設定できるものは以下の3つです。

Mutiply:現在設定されている値に乗算します。
Additive:現在設定されている値に加算します。
Override:現在設定されている値を上書きします。

– Center:ここには、追従させる座標の中心として扱うためのGameObjectを設定します。
中心は、設定されたGameObjectのBoundsの中心になります。
Centerに設定されるものは、[モデル]/Drawables/以下のGameObjectになります。
この項目に何も設定しなかった場合、CubismLookControllerがアタッチされたGameObjectの中心を使用します。

– Damping:対象に追従するまでにかかる時間です。値が小さいほど追従の速度が上がります。

– Target:視線を追従させるターゲットを設定します。詳細は後述しております。

今回は、Blend Mode を[Override]に設定してください。

追従させるパラメータの指定

[モデル]/Parameters/ 以下には、そのモデルのパラメータを管理するGameObjectが配置されています。
また、このGameObjectに設定されている名前はパラメータのIDとなっております。
これらはCubismModel.Parameters() で取得できるものと同一です。

このパラメータ用のGameObjectの中から、追従をさせたいIDのものに、CubismLookParameterというコンポーネントをアタッチします。

パラメータ用のGameObjectに CubismLookParameter がアタッチされていると、前述のCubismLookControllerがそれを参照して追従させるようになります。

CubismLookParameterには、2つの設定項目があります。

– Axis : 設定されたパラメータを、何軸の変形として扱うかを指定します。例えば、Xを指定した場合、TargetのX軸の値から計算して設定します。

– Factor : 計算された値に掛ける数値を設定します。計算結果の値は-1~+1の範囲になるため、
パラメータによってはその範囲を大きくしたり小さくしたり、または+と-を反転したりする方が自然な動きになることがあります。

視線を追従させる対象の設定

最後に、追従させる対象を用意します。

CubismLookControllerコンポーネントの[Target]には、[ICubismLookTarget]インターフェースを実装したコンポーネントを設定します。

ターゲットの設定次第では、視線を追従させる対象をマウスカーソルやGameObjectの位置にしたり、ドラッグ中のみ追従させる等特定の条件をつけることも可能です。

「CubismLookTarget」というC#スクリプトを作成し、コードを以下のように書き換えます。
ここでは、ドラッグ中のマウスの座標を追従するようにしております。

using Live2D.Cubism.Framework.LookAt;
using UnityEngine;

public class CubismLookTarget : MonoBehaviour, ICubismLookTarget
{
    public Vector3 GetPosition()
    {
        if(!Input.GetMouseButton(0))
        {
            return Vector3.zero;
        }

        var targetPosition = Input.mousePosition;

        targetPosition = (Camera.main.ScreenToViewportPoint(targetPosition) * 2) - Vector3.one;

        return targetPosition;
    }


    public bool IsActive()
    {
        return true;
    }
}

空のGameObjectを作成し、それに上記のCubismLookTargetをアタッチします。

モデルを選択し、InspectorビューからCubismLookControllerの[Target]に、上で作成したGameObjectをドラッグ・アンド・ドロップします。

これで設定は完了です。

シーンを実行して、Gameビューをマウスの左ボタンでドラッグすると、モデルの視線が追従します。

この記事はお役に立ちましたか?
はいいいえ
この記事に関するご意見・
ご要望をお聞かせください。