Unity 更新 ScriptableObject 屬性名稱 資料不丟失


建立時間: 2024年8月5日 01:11
更新時間: 2024年8月6日 02:01

說明

一般腳本組件更新變數名稱只需要用 FormerlySerializedAs 回到 Unity Editor 會自動更新組件的變數名稱,但 asset 檔卻沒辦法更新變數名稱,本篇將教大家如何更新 asset 檔的變數名稱。

腳本

SettingDirtyRecursively.cs

using System.IO;
using UnityEditor;
using UnityEngine;

/// <summary>
/// 選單 - 遞迴標記資料夾下所有的 ScriptableObject 為髒的
/// </summary>
public class SettingDirtyRecursively
{
    /// <summary>
    /// 處理遞迴標記資料夾下所有的 ScriptableObject 為髒的
    /// </summary>
    [MenuItem("Assets/Tools/Set Dirty Recursively", false, 2000)]
    private static void HandleSettingDirtyRecursively()
    {
        // 獲取選擇的資料夾路徑
        string selectedFolderPath = AssetDatabase.GetAssetPath(Selection.activeObject);

        // 確保選擇的是資料夾
        if (!Directory.Exists(selectedFolderPath))
        {
            Debug.LogError($"{selectedFolderPath} is not a valid folder.");

            return;
        }

        SetDirtyRecursively(selectedFolderPath);

        // 保存所有更改
        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh();

        Debug.Log($"Finished setting dirty from {selectedFolderPath}.");
    }

    /// <summary>
    // 遞迴標記資料夾中的所有 ScriptableObject 為髒的
    /// </summary>
    /// <param name="folderPath">資料夾路徑</param>
    private static void SetDirtyRecursively(string folderPath)
    {
        // 遞迴獲取資料夾中的 asset 檔
        string[] assetPaths = Directory.GetFiles(folderPath, "*.asset", SearchOption.AllDirectories);

        foreach (string assetPath in assetPaths)
        {
            ScriptableObject asset = AssetDatabase.LoadAssetAtPath<ScriptableObject>(assetPath);

            if (asset != null)
            {
                EditorUtility.SetDirty(asset);
            }
        }
    }
}

建議將腳本存放在 Assets/Editor/SettingDirtyRecursively.cs

使用方式

在 Project Browser 選擇資料夾,按右鍵 Tools > Set Dirty Recursively。

Set Dirty Recursively

修改 ScriptableObject 變數

  1. 新增 [FormerlySerializedAs("oldName")] 特性。
  2. 更新變數名稱。
  3. 將所有的 asset 檔變成髒的。
  4. 移除 [FormerlySerializedAs("oldName")] 特性。
觀看次數: 291
ScriptableObjectassetunity
按讚追蹤 Enjoy 軟體 Facebook 粉絲專頁
每週分享資訊技術

一杯咖啡的力量,勝過千言萬語的感謝。

支持我一杯咖啡,讓我繼續創作優質內容,與您分享更多知識與樂趣!