【Mac各機種への対応状況について】
現在、Cubism EditorはApple M1チップ搭載機種には対応しておりません。
詳細は 動作環境 をご参照ください。
関連するお問い合わせへの対応はこの文章をもって代えさせていただきます。
また、Cubism SDKは現在公開中の製品全てにおいてApple M1チップ搭載機種及びmacOS 11.0 Big Surには対応しておりません。
Cubism 製品のマニュアル・チュートリアルはこちら
 
Cubism Editorマニュアル    Cubism Editorチュートリアル    Cubism SDKマニュアル    Cubism SDKチュートリアル

Cubism SDK for Unityで、ポーズのフェードをオフにするには

いつもお世話になっています。

何も表示していない状態から、「腕Bなどの専用パーツを持つモーションを表示」しようとすると
「基本ポーズのパーツが一瞬表示されて、腕Bがフェードインしてくる」という状態になってしまいます。
ポーズ関連のフェードを強制的にオフにした状態で、モーションを開始したいのですが、そういうことは可能でしょうか。

live2d.frameworkのL2DPose.csのコードの中身を見たのですが

public void updateParam(ALive2DModel model) 内で

// 設定から時間を変更すると、経過時間がマイナスになることがあるので、経過時間0として対応。
if (deltaTimeSec < 0) deltaTimeSec = 0;

for (int i = 0; i < partsGroupList.Count; i++)
{
normalizePartsOpacityGroup(model, partsGroupList[i], deltaTimeSec);
copyOpacityOtherParts(model, partsGroupList[i]);
}

で、となっているので、このdeltaTimeSecを大きな値にする(フェード時間を強制的に終わらせる)ようなメソッドを追加すれば一応できはするのですが、
正式な手段があれば教えていただけると助かります。


コメント

  • 追記になります。
    deltaTimeSecを大きな値にしても、
    最初の1フレームは、基本パーツが表示されてしまうようです。

    コードを追ってみたところ、
    public void normalizePartsOpacityGroup の
    visiblePartsは、2フレーム以降は1になっているのですが、最初の1フレームだけ0になってしまう状態です。


    やりたいことは「指定したモーションで表示を開始する」ということです。

    Live2Dは補間をあちこちでしているため、全体を把握できていないのですが、
    普通にやろうとすると、基本モーションや基本ポーズとの間で、補間やフェードが入ってしまっているため、それを無効化しようとしています。
    そういったことは設計的に無理があるのでしょうか。

  • @rodostw さん

    以下のsetPartsOpacityとsetParamFloat部分を修正すると、一瞬表示される事がなくなるかと思います。

    L2DPose.csの89行目あたり
    public void initParam(ALive2DModel model)
    {
        if (model == null) return;
    
        for (int i = 0; i < partsGroupList.Count; i++)
        {
    
            L2DPartsParam[] partsGroup = partsGroupList[i];
            for (int j = 0; j < partsGroup.Length; j++)
            {
                partsGroup[j].initIndex(model);
    
                int partsIndex = partsGroup[j].partsIndex;
                int paramIndex = partsGroup[j].paramIndex;
                if (partsIndex < 0) continue;// 存在しないパーツです
    
                bool v = (model.getParamFloat(paramIndex) != 0);
    //            model.setPartsOpacity(partsIndex, (v ? 1.0f : 0.0f));
    //            model.setParamFloat(paramIndex, (v ? 1.0f : 0.0f));
                model.setPartsOpacity(partsIndex, 0.5f);
                model.setParamFloat(paramIndex, 0.0f);
            }
        }
    
    1)デフォルトの場合


    2)setPartsOpacity = 0.0f, setParamFloat = 0.0fの場合、逆に一瞬だけ腕が消えます


    3)setPartsOpacity = 0.5f, setParamFloat = 0.0fの場合がベストかと

  • ありがとうございます!
    参考にさせていただいて、調整をかけてみます。
コメントするにはサインインまたは登録して下さい。