視線追従の設定
最終更新: 2020年1月30日
ここでは、モデルの視線などをマウスカーソルに追従させる方法を説明します。
概要
視線の追従を設定するには、Cubism SDKでは、 Lookat というコンポーネントを利用します。
SDKにはこのコンポーネントを使った[LookAt]というサンプルシーンが同梱されておりますので、そちらもあわせてご覧ください。
こちらはモデルの頭上を回るGameObjectの位置を視線で追従するサンプルとなっております。
/Assets/Live2D/Cubism/Samples/Lookat
Lookatを設定するには、以下の3つを行ないます。
- Lookatを管理するコンポーネントのアタッチ
- 追従させるパラメータの指定
- 視線を追従させる対象の設定
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ビューをマウスの左ボタンでドラッグすると、モデルの視線が追従します。