Live2Dに関するユーザーのみなさま同士の交流・ご質問・不具合の報告・提案・要望などについて是非お寄せください。
※Live2D公式スタッフからの発言や回答については確約できないことを予めご了承ください。
Cubism 製品のマニュアル・チュートリアルはこちら
 
Cubism Editorマニュアル    Cubism Editorチュートリアル    Cubism SDKマニュアル    Cubism SDKチュートリアル

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

5月 2018 編集されました Cubism 3 SDK
----------------------------------------
動作環境
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 が更新されてループ無しの設定が破棄されてしまいます。

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

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

タグ付けされた:

コメント

  • 5月 2018 編集されました
    @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();
    
            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
                            ("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」のチェックを外すと、インポート処理が行われません。

  • 詳しい解決方法ありがとうございます、試してみます。
    今後ともよろしくお願いします。
コメントするにはサインインまたは登録して下さい。