ようこそ!

初めてですか? 参加するには、どちらかのボタンをクリックしてください!

【Live2D Creators Circleのご案内】
Live2Dでは現在、業務をお手伝いしていただけるユーザーの方々を募集しています。
もし、ご興味がありましたら下記URLより詳細をご確認ください。
https://goo.gl/0oBmkq
 
いつもLive2Dコミュニティをご活用いただきありがとうございます。

不具合のお問い合わせの際は迅速な対応にするため、
お問い合わせ内容に加えて下記の情報を明記してくださいますようお願い申し上げます。

・問題が発生したアプリケーション名とバージョン(例:Cubism Editor 3.1.02、Euclid Editor 1.2.0 など)
・ご利用のPC環境(例:Windows10、macOS HighSierra など)
・グラフィックボード(例:GeForce GTX 950M など)
・メモリ(例:8GB)
 

同一モデル内で自動まばたきと寝るモーションを両立させたい

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

以下の手順に従って、自動まばたきを設定しました。

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

喜怒哀楽などのモーションの他に、寝た状態で待機するモーションを設定しています。
通常のモーションの場合は、Overrideでまばたきさせて良いのですが、
寝た場合にもまばたきしてしまいます。これを回避したいです。

まずは
EyeBlinkController = gameObject.GetComponent<CubismEyeBlinkController>();
としておき、寝るモーションに入る前に
EyeBlinkController.enabled = false;
寝るモーションから出たあとに
EyeBlinkController.enabled = true;
としてみました。

この場合、寝るモーション中にまばたきはしなくなるのですが、
目が開いたままで期待通りとなりません。
寝ている間は目が閉じてほしいです。

そこで、以下のようにしましたが、変わらず開いたままです。
EyeBlinkController.enabled = false;
EyeBlinkController.EyeOpening = 0.0f;

EyeBlinkController.enabled = true;
EyeBlinkController.EyeOpening = 1.0f;

次にInspectorからAddComponentせずに
寝るモーション以外の際にCubismEyeBlinkControllerを追加し
if (EyeBlinkController == null)
{
EyeBlinkController = gameObject.AddComponent<CubismEyeBlinkController>();
EyeBlinkController.BlendMode = CubismParameterBlendMode.Override;
}
寝るモーションではCubismEyeBlinkControllerを削除しました。
if (EyeBlinkController != null)
{
Destroy(EyeBlinkController);
EyeBlinkController = null;
}

これは寝ている場合は期待通りに動作するのですが、
寝るモーション以外でまばたきをしなくなってしまいました。
おそらくこちらで相談させていただいたものと同じ現象です。
http://forum.live2d.com/discussion/910/

何か良い方法はありませんでしょうか?
自動まばたきを諦め、各モーション内で
目を制御するしかありませんでしょうか?

よろしくお願いします。
以上

コメント

  • @ganessa さん

    CubismEyeBlinkControllerではなく、CubismAutoEyeBlinkInputのenabledを変更してみてください。

    CubismEyeBlinkControllerは、瞬き用に設定されたパラメータの値を操作するだけのコンポーネントで、motin3.jsonに設定された瞬き用の値を設定するのにも使われます。
    Controller自体ではなく、Controllerの値を操作しているコンポーネントの方を切れば、motion3.jsonの値は活かしたまま自動瞬きだけを切ることが出来ます。
  • 早速のご返信、ありがとうございます。
    制御側ではなく入力側を止めるのですね。

    あらかじめコンポーネントを取得し、
    AutoEyeBlinkInput = gameObject.GetComponent<CubismAutoEyeBlinkInput>();

    まばたき中は入力を無効に、
    AutoEyeBlinkInput.enabled = false;

    まばたき中以外は入力を有効にしました。
    AutoEyeBlinkInput.enabled = true;

    残念ながらこのままでは、目は開いたままでした。
    同様に、まばたき中はEyeOpeningを0.0に、まばたき中以外はEyeOpeningを1.0にしました。

    EyeBlinkController = gameObject.GetComponent<CubismEyeBlinkController>();
    EyeBlinkController.EyeOpening = 0.0f;
    EyeBlinkController.EyeOpening = 1.0f;

    これで、目をとじるようになりました。
    まとめますと、以下のような感じです。

    private CubismAutoEyeBlinkInput AutoEyeBlinkInput;
    private CubismEyeBlinkController EyeBlinkController;

    void Start() {
    AutoEyeBlinkInput = gameObject.GetComponent<CubismAutoEyeBlinkInput>();
    EyeBlinkController = gameObject.GetComponent<CubismEyeBlinkController>();
    }

    private void SetSleep (bool isSleep)
    {
    AutoEyeBlinkInput.enabled = !isSleep;
    EyeBlinkController.EyeOpening = isSleep ? 0.0f : 1.0f;
    }

    CubismAutoEyeBlinkInputのenabledをfalseにすると、
    Overrideする前の寝るモーションに戻ると良いのですが、
    EyeOpeningの設定が効いてしまっているようです。
    これは仕方がないのでしょうか?
  • edited 01/12
    > CubismAutoEyeBlinkInputのenabledをfalseにすると、
    > Overrideする前の寝るモーションに戻ると良いのですが、
    > EyeOpeningの設定が効いてしまっているようです。
    > これは仕方がないのでしょうか?
    寝るというモーションの場合、
    EyeBlinkController.EyeOpening = 0.0f;
    とすることで対応できます。

    ところが、ウインクというモーションの場合、
    EyeBlinkController.EyeOpeningを
    スクリプトで動的に変化させる必要があります。

    EyeBlinkController.EyeOpeningの設定が効かずに、
    CubismAutoEyeBlinkInputやCubismEyeBlinkControllerを
    アタッチする前の状態になると良いのになぁ・・・
    という意味です。

    Blend ModeにOverrideではなく、Noneのようなものを
    設定すれば無効になるといった方法でもOKです。
    お手軽にまばたきやリップシンクのOn/Offを
    切り替えられるようになると良いです。

    もしかすると、EyeOpeningが効いてしまうのも
    弊社でしか発生しないのでしょうか?
  • EyeOpeningが効いてしまう件は、以下の問題が
    解消した環境でも引き続き発生しております。
    http://forum.live2d.com/discussion/910/目や口が開きっぱなしになる

    原因は別のようでした。
    念のため、報告させていただきます。
Sign In or Register to comment.