質問は基本的に1スレッドにつき1つの内容でお願いします。

お問い合わせの際は下記の情報を明記をお願いいたします。

▼ソフトウェアに関するご質問の場合

・【問題が発生したソフトウェア名とバージョン】(例:Cubism Editor 3.1.02、Euclid Editor 1.2.0 など)
・【ご利用のPC環境】例:Windows10、macOS HighSierra など
・【グラフィックボード】例:GeForce GTX 950M など
・【メモリ】例:8GB
・【原画(イラスト)を制作したソフトウェア】例:Photoshop , CLIP STUDIO , SAI など
・【問い合わせ内容がわかるスクリーンショットまたは動画】

---------------------------

▼SDKに関するご質問の場合

・現象の再現を行い検証させていただきますので、再現する最小のプロジェクトのご提供か、再現するまでの手順
・使用したSDKのバージョン

Unityでreimportが実行されると.prefabの内容が変更されてしまいます

edited 05/15 in Cubism SDK 3
----------------------------------------
動作環境
Cubism Editor 3.2.00
Unity2017.4.1f1
Windows7
NVIDIA Quadro K2200
メモリ32GB
Cubism31SdkUnity-7.unitypackage
----------------------------------------

モデル.moc3ファイルやモデル.model3.jsonファイルに対してUnity上でアセットのreimportが実行されると、
その度に モデル.prefabが更新(変更)されてしまいます。

公式の hiyori_free_t05.cmo3 を用いて再現しました。

再現したUnityプロジェクト(gitリポジトリ)を添付しました。
hiyori_free.moc3、hiyori_free.model3.json、hiyori_free.asset、などのファイル内容に変更がなくても、
reimportが実行される度に hiyori_free.prefab の内容が変更されています。

あと同様な現象として .motion3.json に変更が無くてもreimportが実行されると、
.anim が更新されてループ無しの設定が破棄されてしまいます。

個人の環境で閉じている分には問題は軽微ですが、複数人で開発する場合はとても都合が悪いです。

なにか解決方法あれば、よろしくお願いいたします。

Tagged:

コメント

  • edited 05/16
    @nishi さん

    Live2D Cubism3 SDK for Unityのすべてのインポート処理はCubismAssetProcessor.OnPostprocessAllAssets() から行っております。
    この関数の先頭に、フラグでその後の処理を行うかどうかの分岐を追加するのはいかがでしょうか?


    1.インポート処理開始用のフラグを持つScriptableObjectを用意する。
    using UnityEngine;
    using UnityEditor;
    
    public class CubismImportPermission : ScriptableObject
    {
        public bool IsAllowInport = true;
    
    
        [MenuItem("Live2D/Create Asset Instance")]
        static void CreateAssetInstance()
        {
            var asset = CreateInstance<CubismImportPermission>();
    
            AssetDatabase.CreateAsset(asset, "Assets/Editor/CubismImportPermission.asset");
            AssetDatabase.Refresh();
        }
    }

    2.メニューバーの[Live2D] → [Create Asset Instance]をクリックして、CubismImportPermissionをアセット化する。
    アセット化についてはこちらをご覧ください。
    https://anchan828.github.io/editor-manual/web/scriptableobject.html


    3.CubismAssetProcessor.OnPostprocessAllAssets()の先頭で、フラグが立っていなければリターンする。
            private static CubismImportPermission _importPermission;
            public static CubismImportPermission IsImport
            {
                get
                {
                    if (_importPermission == null)
                    {
                        _importPermission = AssetDatabase.LoadAssetAtPath<CubismImportPermission>
                            ("Assets/Live2D/Cubism/Editor/CubismImportPermission.asset");
                    }
                    return _importPermission;
                }
            }
            
            private static void OnPostprocessAllAssets(
                string[] importedAssetPaths,
                string[] deletedAssetPaths,
                string[] movedAssetPaths,
                string[] movedFromAssetPaths)
            {
                // フラグが立っていなければインポート処理を行わない
                if (!IsImport.IsPermitInport)
                {
                    return;
                }
                
                
                // Make sure builtin resources are available.
                GenerateBuiltinResources();
                
                …
                …

    手順は以上となります。
    2で作成したアセットの「Is Permit Inport」のチェックを外すと、インポート処理が行われません。

  • 詳しい解決方法ありがとうございます、試してみます。
    今後ともよろしくお願いします。
Sign In or Register to comment.