めぽ
1
【Cubism SDKのバージョン】
Cubism 5 SDK for Unity R2
【OS名・バージョン】
Windows10
【開発使用ツール】
Visual Studio 2022
Unity 2020.3.19
【不具合の状況】
Live2Dモデルのアニメーションをスクリプト側から制御した際に、Animatorの追加レイヤーに設定してるOverrideのレイヤーが機能しなくなるという問題が発生しました。
Animator設定
・Layer0 Base
・Layer1 Face Weight1 Override
上記の設定でスクリプト側から1度
animator.Play(“AAA”, BaseLayer,0);
などで1度ベースのアニメーションをTransitionを用いず変更した際にそれ以降に行う
animator.Play(“BBB”, FaceLayer,0);
などのアニメーションが機能しなくなります。
(BaseLayerのアニメーションを通常のTransitionで変更する場合は正常に動作します。)
CubismFadeControllerをアタッチしなければ正常に動作するのでそこが原因かなとは考えています。
以前のプロジェクトでは正常に動作していました。
(Unityバージョンは同じ、Cubism Editor4.2、SDKバージョンは記録に残っておらず確認できませんでした。当時の最新版ではあったとおもいます。)
そもそもの使い方として正しくない場合などあるかと思いますが、その点も含めもしなにかわかることがありましたら、ご教授いただければ幸いです。
@めぽ 様
いつも弊社製品をご愛顧くださり誠にありがとうございます。
Live2Dスタッフでございます。
Cubism SDK for Unity R2はUnity 2020に非対応です。
これらの環境につきましてはお間違いありませんでしょうか?
もしご記載いただいたものでしたら、適正な環境で使用して減少が再現するかご確認いただけますでしょうか?
また、もし可能でしたら、モデルやモーションの構造やMecanimの組み方、スクリプトの詳細などをお教えいただけますでしょうか?
よろしくお願いいたします。
めぽ
3
お世話になっております。
お忙しい中、回答頂き誠にありがとうございます。
申し訳ありません、質問した時点ではUnity2020を使用しておりました。
ですがその後Unityを2022.3.2に更新いたしましたが上記の問題は解決されませんでした。
簡単なサンプルを作ってみたところ同じような状況が発生したため、その詳細を載せておきます。足りない情報などあればご指摘いただけたらご用意いたします。
Live2Dモデル構造
以上のようになっており、
Baseモーション
Faceモーション
Animator
Baseレイヤー
Faceレイヤー
となっており、
Baseレイヤーの表情に関する項目だけをFaceレイヤーで上書きする想定でした。
コード側で
if (Input.GetMouseButtonDown(0))
{
animator.Play(“Base1”, 0,0);
}
if (Input.GetMouseButtonDown(1))
{
animator.Play(“Face0”, 1, 0);
}
if (Input.GetMouseButtonDown(2))
{
animator.Play(“Face1”, 1, 0);
}
このような形で呼び出そうとした際
一度でも左クリックでBase1アニメーションに変更を行うと、
それ以降の右クリック、ホール押し込みでのFace変更が出来ません。
(左クリックせずにFace変更しようとすると正常に動作する)
再生の青いバーは動いているので、アニメーション呼び出しは正常に行われていそうです。
実装方法に問題があるようでしたらご指摘いただけると幸いです。
お手数をお掛けして申し訳ありません。
めぽ
4
ベースモーションの画像に間違いがありました。
正しくはこちらです。
ご回答ありがとうございます。
ご提示いただいた内容で検証いたしましたが、現象の再現は確認できませんでした。
もし可能であれば、検証のために、現象が確認できる最小限のプロジェクトをご提供いただけませんでしょうか?
ご提供頂ける場合、以下にアップロードをお願いいたします。
よろしくお願いいたします。
めぽ
6
先程、現象が確認できるプロジェクトをアップロードさせていただきました。
確認の程、宜しくお願い致します。
@めぽ 様
検証用プロジェクトのご提供ありがとうございました。
いただいたプロジェクトを確認したところ、FaceのレイヤーにCubismFadeStateObserverがつけられていませんでした。
Cubism SDK for UnityのMotonFadeは、Animatorから、使用するLayerすべてにCubismFadeStateObserverを付ける必要があります。
Baseのレイヤーと同様に、FaceのレイヤーにもCubismFadeStateObserverをつけてください。
また、MotionFadeは空のステートやモデルに存在しないモーションを使用することを想定していません。
いただいたプロジェクトのFaceレイヤーは、初期ステートがNoneになっています。
この状態では、上記のCubismFadeStateObserverをつけただけだとエラーが発生してしまうのでご注意ください。
こちらの回避案につきましては以下の3つになります。
・モデルデータに空のモーション(.motion3.json)を用意する
メリット:対応にプログラムの修正が不要
デメリット:モデルデータの管理コストが増える
・CubismFadeStateObserverに、モーションが存在しなければ追加処理を行わないようカスタマイズする
メリット:モデルデータの修正が不要
デメリット:プログラムの修正が必要
・MotionFade(CubismFadeController)を使用しない
メリット:各種変更のコストがほぼない
デメリット:Cubismの切り替わり機能が無効になる
以上、よろしくお願いいたします。
「いいね!」 1
めぽ
8
検証していただきありがとうございます。
また、非常に詳しい修正案の提案もして頂き嬉しい限りです。
プロジェクトの内容を相談しながら解決策を選ばせて頂きます。
心より御礼申し上げます。