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。
修改 ScriptableObject 變數
- 新增
[FormerlySerializedAs("oldName")]
特性。 - 更新變數名稱。
- 將所有的 asset 檔變成髒的。
- 移除
[FormerlySerializedAs("oldName")]
特性。
觀看次數: 291
ScriptableObjectassetunity
相關文章:
一杯咖啡的力量,勝過千言萬語的感謝。
支持我一杯咖啡,讓我繼續創作優質內容,與您分享更多知識與樂趣!