移動するLive2Dモデルの視線追従

Live2D

こちらのチュートリアルにとても分かりやすくLive2D SDKによる視線追従の説明がされていますが、1つだけ注意点があります。

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;
    }
}

上記のサンプルコードはモデルがマウスクリック位置(ターゲット座標)を向くようにする為のコードですが、入力がなかった場合にVector3.zeroを返しています。
Live2Dの視線追従はviewport上、つまりX,Y座標が-1~1の間でターゲット座標を指定するようになっています。そのためこのようにデフォルトで(0,0)=スクリーンの中心を向かせてしまうと、入力しない場合にモデルは「正面」ではなく「スクリーンの中心」の方を向いてしまいます。
Vtuber的な、画面の中心に大きくキャラの顔だけが固定で据えてあるような使い方であれば問題ないかと思いますが、Live2Dで作った小さいキャラが画面内を動き回るようなゲームの場合、どっちに向かって走っていてもデフォルトでは常に画面の中心を目が向いているという変な動きになってしまいます。
これを防ぐために、モデルのTransformを常に保持しておいて、「return modelTransform.position;」のように返せば、キャラが画面のどこを動き回っていても「未入力なら正面を向く」という処理が実現できます。

1 Star2 Stars3 Stars4 Stars5 Stars (まだ投票されていません)
読み込み中...

コメント

タイトルとURLをコピーしました