★お知らせ(2023/12/27)
いつもLive2D公式コミュニティをご利用いただき誠にありがとうございます。
本コミュニティは2023年12月27日 11:00をもって閉鎖いたしました。
今後の運営はすべて新Live2D公式クリエイターズフォーラムに移行します。
閉鎖に伴い、以下機能は利用不可となります。
・アカウントの新規作成
・トピック投稿、返信
たくさんのご利用誠にありがとうございました。

新Live2D公式クリエイターズフォーラムは以下バナーよりご利用いただけます。
Live2D公式クリエイターズフォーラム

なお、本コミュニティに投稿されたトピックはすべて残りますが、今後削除する可能性がございますので予めご了承ください。
閉鎖に関するお問い合わせにつきましてはLive2D公式クリエイターズフォーラムへご連絡ください。

目や口が開きっぱなしになる

Unity 2017.3.0f3
Cubism 3.1 SDK for Unity
を使用しております。

以下の手順に従って、自動まばたきとリップシンク設定を行いました。

自動まばたきの設定
http://docs.live2d.com/cubism-sdk-tutorials/eyeblink/

リップシンクの設定
http://docs.live2d.com/cubism-sdk-tutorials/lipsync/

しばらくは期待通り自動的にまばたきをし、音声に合わせて口を開閉してくれますが、
開発を進めるうちに、目や口が開きっぱなしになることがあります。
感覚としては30分〜1時間くらいで発生しているように思います。
もしかすると、開発環境の再起動などと関係しているかもしれません。

CubismEyeBlinkControllerとCubismMouthControllerを
Inspectorから削除後に再度Add Componentで追加し直すと、
再び期待通りに開閉するようになります。

また、これを自動的に行うためにInspector上でAdd Componentせず、
スクリプトから以下のように追加した場合では
これが改善されず、目や口が開きっぱなしになります。

--
CubismEyeBlinkController = gameObject.AddComponent();
CubismEyeBlinkController.BlendMode = CubismParameterBlendMode.Override;

CubismAutoEyeBlinkInput = gameObject.AddComponent();
CubismAutoEyeBlinkInput.Mean = 4;
CubismAutoEyeBlinkInput.MaximumDeviation = 2;

CubismMouthController = gameObject.AddComponent();
CubismMouthController.BlendMode = CubismParameterBlendMode.Override;

CubismAudioMouthInput = gameObject.AddComponent();
CubismAudioMouthInput.AudioInput = gameObject.GetComponent();
CubismAudioMouthInput.Gain = 10;
CubismAudioMouthInput.Smoothing = 1.0f;
--

このような現象が発生した方はいらっしゃいませんでしょうか?
また、その際はどのように対応されましたでしょうか?

コメント

  • 申し訳ありません。
    <>で囲った部分が欠落していました。
    プレビューでは正しく表示されていたのですが・・・
    --
    CubismEyeBlinkController = gameObject.AddComponent<CubismEyeBlinkController>();
    CubismEyeBlinkController.BlendMode = CubismParameterBlendMode.Override;

    CubismAutoEyeBlinkInput = gameObject.AddComponent<CubismAutoEyeBlinkInput>();
    CubismAutoEyeBlinkInput.Mean = 4;
    CubismAutoEyeBlinkInput.MaximumDeviation = 2;

    CubismMouthController = gameObject.AddComponent<CubismMouthController>();
    CubismMouthController.BlendMode = CubismParameterBlendMode.Override;

    CubismAudioMouthInput = gameObject.AddComponent<CubismAudioMouthInput>();
    CubismAudioMouthInput.AudioInput = gameObject.GetComponent<AudioSource>();
    CubismAudioMouthInput.Gain = 10;
    CubismAudioMouthInput.Smoothing = 1.0f;
    --
  • 編集済: 1月 2018
    @ganessa さん

    動作を確認してみましたが、目や口が開いたままになるという現象が再現できませんでした。
    もし可能であれば、現象が再現する最小のプロジェクトをいただけませんでしょうか?


    Cubismのコンポーネントを動的にアタッチする件ですが、この場合はチュートリアルには記述していない注意があります。
    各機能のControllerでは、値を適用するパラメータへの参照の取得を、Start()のタイミングで行っています。
    参照する対象は、まばたきやリップシンクの場合、CubismLookParameterまたはCubismMouthParameterがアタッチされたGameObjectです。

    そのため、Parameterをアタッチしないまま、先にControllerをアタッチしてしまうと、ParameterがアタッチされたGameObjectを見つけることが出来ず、Controllerの値を操作してもパラメータへ反映されないことがあります。
    もしこの減少が発生していた場合、Parameterをアタッチした後にControllerをアタッチする、または、Parameterをアタッチした後でControllerのRefresh()を呼び出すことで回避することが出来ます。

    こちらの注意点は後日チュートリアルへ追記させていただきます。
  • 再現しないのですね・・・
    最小プロジェクトを作成してみます。

    Refresh()は、何度も試してみましたので、
    別の要因かと思われます・・・
  • 最小プロジェクトを作成するために、
    モデルの差し替えやInputやControllerの
    アタッチ/デタッチを繰り返すうちに、
    本現象が再現しなくなりました。

    この作業の過程でInputやControllerを
    複数アタッチしていることがありました。
    もしかすると、それが原因だったのかもしれません。

    お騒がせして申し訳ありませんでした。
    また再発するようであれば、追記させていただきます。
  • 編集済: 3月 2018
    正常にリップシンクされず口が閉じたままになる問題が発生しましたので、
    CubismMouthControllerとCubismAudioMouthInputにログを入れ問題の箇所を調査しました。
    MouthOpeningに設定された値は正しいが、MouthOpeningの値を取得すると更新されていないように見えました。

    CubismMouthControllerを以下のように置き換えると問題が発生しなくなり、
    元に戻すと問題が再発するようでした。
    public float MouthOpening = 1f;
    
    private float mouthOpening = 1f;
    public float MouthOpening
    {
        get
        {
            return mouthOpening;
        }
        set
        {
            mouthOpening = value;
        }
    }
    
    同じ現象でお悩みの方の参考になればと思います。
  • 最新版のCubism 3 SDK for Unity R8に上げてみたのですが、
    本件は改善されていないようでした。

    上記対応が上書きされてしまい口が閉じたままになる問題が再発しましたが、
    幸い同じ対応で回避することが出来ました。
    public float MouthOpening = 1f;
    
    private float mouthOpening = 1f;
    public float MouthOpening
    {
        get
        {
            return mouthOpening;
        }
        set
        {
            mouthOpening = value;
        }
    }
    
    同じ現象でお悩みの方の参考になればと思います。
    /// <summary>
    /// The opening of the eyes.
    /// </summary>
    [SerializeField, Range(0f, 1f)]
    public float MouthOpening = 1f;
    
    MouthOpeningのコメントが
    The opening of the eyes.
    になっているところくらいは直していただきたいところ・・・
  • @ganessa さん

    お世話になっております。

    ご不便をおかけする状況がたびたび発生してしまい大変申し訳ございません。

    ご指摘の箇所の修正も含めて、ご報告いただいた内容を確認したいと考えております。
    そのために、状況が再現できる最小プロジェクトのご提供をお願いできますでしょうか。

    改めてのお願いとなり恐れ入りますが、ご確認の程何卒よろしくお願いいたします。
  • お忙しい中、ご返信ありがとうございます。
    ただいま、リリース予定が重なっておりまして
    最小プロジェクトの作成が出来ておりませんが、
    出来ましたら共有させていただきます。
    よろしくお願いします。
コメントするにはサインインまたは登録して下さい。