新しいLive2D公式コミュニティ(日本向け)が公開されました!
ぜひご利用ください!
Live2D公式コミュニティ

■このコミュニティの今後について
このコミュニティ(forum.live2d.com)につきましては、しばらくの間新コミュニティと並行して運営しますが、2023年夏ごろを目処に方針を決定する予定です。
(2022/12/27追記 2022年内を目処に閉鎖 から変更しております)
内容については決定次第お知らせいたします。
海外向けコミュニティについては変更ございません。
Live2Dに関するユーザーのみなさま同士の交流・ご質問・不具合の報告・提案・要望などについて是非お寄せください。
※Live2D公式スタッフからの発言や回答については確約できないことを予めご了承ください。

Live2D ヘルプ

Cubism Editorダウンロード / 動作環境
Cubism SDKダウンロード / 対応表
Cubism 製品利用ライセンス(SDK含)

Cubism 製品のライセンスについてのお問い合わせはこちら
nizima 及び nizima 製品についてのお問い合わせはこちら
【各最新OSの対応状況について】
Cubism Editorは 4.1.02 正式版以降でWindows 11 及び macOS Monterey に対応しております。ぜひ最新版をご利用ください。
※macOSをお使いの方でOSアップデートする際は必ずCubism Editorのライセンスを解除してください。
Cubism EditorをインストールしているmacOSをアップグレードしたい
Cubism SDKについては各SDKのREADMEまたはNOTICEをご確認ください。

【Mac各機種への対応状況について】
現在、Cubism EditorはApple M1チップ搭載機種には対応しておりません。
詳細は 動作環境 をご参照ください。
関連するお問い合わせへの対応はこの文章をもって代えさせていただきます。
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の場合がベストかと

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