Cubism 製品のマニュアル・チュートリアルはこちら
 
Cubism Editorマニュアル    Cubism Editorチュートリアル    Cubism SDKマニュアル    Cubism SDKチュートリアル

Cubism 4 SDK for Unity R1 でUniTaskが動かなくなる

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

これまで、Cubism 4 SDK for Unity beta2を使用し開発を行っており、
同プロジェクトでUniTask(https://github.com/Cysharp/UniTask)も使用しておりました。

どちらも問題無く使えていたのですが、
CubismSDKをCubism 4 SDK for Unity R1にアップデートしたところ、
UniTaskが動かなくなってしまいました。

現象としては、
特に例外やエラーは出ないのですが、
async関数の中でUniTask.YieldやDelayをawaitした後に処理が戻ってこず止まってしまうというものです。
(こちらはUnityバージョン2019.2.19f1と2019.3.1f1で確認しております。)

詳細な原因はわかっていないのですが、
どうやらCubism 4 SDK for Unity R1の変更でCubismModelに入ったplayerLoopSystem周りの処理が影響していそうです。
試しに以下の箇所をコメントアウトしたところ、UniTaskが正常に動作することを確認いたしました。

File: Live2D\Cubism\Core\CubismModel.cs
378: PlayerLoop.SetPlayerLoop(playerLoopSystem);

UniTask側でもPlayerLoopSystemに手を入れているようなのでそこで競合してしまっているのかと思います。

現状はCubismSDKをアップデートせずbeta2を使用していれば問題ないのですが、
R1にアップデートした上でUniTaskと共存させる方法等ありますでしょうか?

また、今後のアップデートで対応予定はありますでしょうか?

お忙しいところ恐縮ですが、ご確認頂けますと幸いです。

コメント

  • TakahiroSato 様

    お問い合わせ誠にありがとうございます。
    Live2Dスタッフの Tak でございます。

    この度はご不便をおかけしており誠に申し訳ありません。

    CubismSDKをCubism 4 SDK for Unity R1にアップデートしたところ、
    UniTaskが動かなくなる問題についてですが、弊社の方でも既に把握しており、修正に向けて対応を進めております。

    UniTaskと共存させる方法については、Unity 2019.3以降にて GetCurrentPlayerLoop を使用することで
    この現象を回避することができます。
    TakahiroSato 様のご指摘の通り PlayerLoopSystem で競合しているので、
    当該箇所で Unityバージョンによる置き換えをおこなってください。
    Asset/Live2D/Cubism/Core/CubismModel.cs
                var playerLoopSystem =
    #if UNITY_2019_3_OR_NEWER
                    PlayerLoop.GetCurrentPlayerLoop();
    #else
                    PlayerLoop.GetDefaultPlayerLoop();
    #endif
    
    なお、この修正はUnity 2019.3以降の対応となりますので、それ以前のバージョンにつきましては対応不可となりますことを
    予めご了承ください。
    また、この修正は次回のCubism SDK アップデートにて対応する予定です。
    当該現象の対応完了までしばらくお待ちいただくか、上記修正にて対応をお願いいたします。

    ご確認のほど何卒よろしくお願いいたします。
    TakahiroSato
  • Tak 様

    現状での対応方法承知いたしました。
    それでは、Unity 2019.3以降を使用している場合はGetCurrentPlayerLoopで対応し、
    2019.2以前の場合はCubismSDKのbeta2を使用して、CubismSDKのアップデートを待ちたいと思います。

    この度はご確認、ご返信ありがとうございました。
コメントするにはサインインまたは登録して下さい。