LoginSignup
0
0

More than 1 year has passed since last update.

Unityゲーム制作奮闘記 - Live2dモデルの瞬き異常動作の調査

Posted at

はじめに

本事象には結構長いコト悩まされていて、未だに完全な解決には至っていません。
もっと良い対策が見つかったら追記したいと思います。

事象

これはLive2dモデルが半目になる = 瞬きの基準値が勝手に変わり、動作が不安定になるという事象です。
発生するタイミングも明確でなく、故意に再現させることも出来ませんでした。

最初は原因が全く分からず、animationで目を開いてみたり、
パラメータを直接更新してみたのですが、全く解消しませんでした。

調査結果(推測)

事象を切り分けた結果、複数の要因が絡み合って発生していることが見えてきました。

原因①Cubisum Eye Blinkを使い、瞬きをさせている。
原因②Animationで目の開閉度を操作している。
原因③Animationの再生速度を操作している。
※原因③はまだ確定では無いですが、影響している可能性は高そうです。

要するに「目の開閉」というパラメータを、
"Animation"と"Cubisum Eye Blink"という二か所から操作していて、
且つ、Animationの速度変更で動作が不安定になった結果、
タイミングが悪いとCubisum Eye Blinkの瞬きの基準値がずれてしまう
という事だろう、と推測しています。

ちなみに、"Cubisum Eye Blink"の設定は、"Animation"の動きを反映させるために
「Multiple」で設定しています。

image.png

対策

原因は見えてきましたが、
これを解消するには根本的なゲームの作りを見直す必要がある為、
原因を取り除くという方法は採用できません。

なので、Cubisum Eye Blinkの瞬きの基準値がずれるという事象を、
都度復旧する事で、対策したいと考えました。

とはいえ、この方法も一筋縄ではいきません。
瞬きの基準値がずれている原因は、明らかにAnimation側にあるので、
復旧するにはAnimationの更新を止める必要がありそうです。
Animationが目の開閉パラメータを掴んでいる状態だと復旧が出来ません。
(ブレンド用のレイヤーが悪さをしている可能性もある)
しかも単純にAnimatorを一時停止するだけではダメなようです。

現状、復旧が見込める方法は以下の2パターンです。
・Live2dモデルを無効化した状態で、Cubisum Eye Blinkの設定値を初期値に戻す
・Animatorを無効化した状態で、Cubisum Eye Blinkの設定値を初期値に戻す

ただ、どちらの場合もAnimatorが一時的に無効化、
つまりはAnimatorが初期化される事になってしまうので、
ブレンド率などの各種パラメータが初期化されてしまいます。
加えて、Animatorから実行中のBehaviourが停止してしまう為、
処理に不具合が生じる可能性が高いです。

とりあえず現時点ではキャラ変更のタイミング等、
プレイの切れ間に復旧処理を挟むことで暫定対処としましたが、
Animatorを止めずに復旧される方法を模索しなければならないですね。。

_characterArray[i].SetActive(false);
_characterArray[i].GetComponent<CubismEyeBlinkController>().EyeOpening = 1f;
_characterArray[i].SetActive(true);

おわりに

正直、今回の事象するに遭遇する人は、殆ど皆無ではないかと思っています。
ただ自分と同じ思考で開発している方が居ないとも限らないので、
何かしら役に立てば幸いです。

教訓としては、
「Animationで更新するパラメータ」と
「プログラムから直接更新するパラメータ」は、
Live2d側で分けて作った方が無難ですね。
(割と大変ですが)

もしくは、どちらか一方だけで完結させるとか。
一つのパラメータを2か所から同時に操作するのは、
瞬きに限らず、思った以上に動作が不安定です。

作ってみて初めて分かることって多いですよね。
次回の制作時に活かしたい思います。
ここまで読んで頂き、本当に有難うございました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0