【Unity】変更した差分がgitなどで反映されない時の対処法

Tips

エディタ拡張 などでデータを作った時や変数名を変えた時、 Animator をいじった時など、たまにUnityエディタ上で変更した差分が git などで反映されないことがある。

スポンサーリンク

解決策

原因としては、Dirtyフラグがついていないことが原因
強制的にDirtyフラグを付けるスクリプトを作成し、選択中のフォルダ以下のアセット全てに適用されるように右クリックのメニューから実行できるようにした。

#if UNITY_EDITOR
using System.Collections.Generic;
using UnityEditor;

/// <summary>
/// 選択中のアセットに対してDirtyフラグを強制的に設定するスクリプト
/// </summary>
public class ForceSetDirtyToAssets
{
    [MenuItem("Assets/Set Assets as Dirty", false)]
    public static void SetSelectedAssetsDirty()
    {
        var selectedAssetGUIDs = Selection.assetGUIDs;
        if (selectedAssetGUIDs.Length == 0)
        {
            return;
        }

        var folderPaths = new List<string>();
        foreach (var guid in selectedAssetGUIDs)
        {
            var assetPath = AssetDatabase.GUIDToAssetPath(guid);
            if (AssetDatabase.IsValidFolder(assetPath))
            {
                folderPaths.Add(assetPath);
            }
            else
            {
                SetAssetDirtyByPath(assetPath);
            }
        }

        SetAssetsInFoldersDirty(folderPaths);
        AssetDatabase.SaveAssets();
    }

    private static void SetAssetDirtyByPath(string assetPath)
    {
        var asset = AssetDatabase.LoadAssetAtPath<UnityEngine.Object>(assetPath);
        if (asset != null)
        {
            EditorUtility.SetDirty(asset);
        }
    }

    private static void SetAssetsInFoldersDirty(IEnumerable<string> folderPaths)
    {
        var allAssetGUIDsInFolders = AssetDatabase.FindAssets("", folderPaths.ToArray());
        foreach (var guid in allAssetGUIDsInFolders)
        {
            var assetPath = AssetDatabase.GUIDToAssetPath(guid);
            SetAssetDirtyByPath(assetPath);
        }
    }
}
#endif
Tipsエディタ拡張
スポンサーリンク
フーシャ

主にUnityを触ってるクライアントエンジニア。
学部の情報工学科卒業後、
スマホ向けゲームの開発/運営会社に新卒で入社して現在5年目の社会人です。

フーシャをフォローする
フーシャをフォローする

コメント

タイトルとURLをコピーしました