★お知らせ(2023/12/27)
いつもLive2D公式コミュニティをご利用いただき誠にありがとうございます。
本コミュニティは2023年12月27日 11:00をもって閉鎖いたしました。
今後の運営はすべて新Live2D公式クリエイターズフォーラムに移行します。
閉鎖に伴い、以下機能は利用不可となります。
・アカウントの新規作成
・トピック投稿、返信
たくさんのご利用誠にありがとうございました。

新Live2D公式クリエイターズフォーラムは以下バナーよりご利用いただけます。
Live2D公式クリエイターズフォーラム

なお、本コミュニティに投稿されたトピックはすべて残りますが、今後削除する可能性がございますので予めご了承ください。
閉鎖に関するお問い合わせにつきましてはLive2D公式クリエイターズフォーラムへご連絡ください。

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<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」のチェックを外すと、インポート処理が行われません。

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