通过路径加载预制体,并对预制体进行修改保存
● 每日一记
using System;
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;
//预制体修改
namespace PrefabModification
{
public class EditorWindow : EditorWindow
{
[MenuItem("Editor/EditorWindow")]
private static void ShowWindow()
{
var window = GetWindow<EditorWindow>();
window.titleContent = new GUIContent("预制体修改");
window.Show();
}
string stringToEdit = "";
private void OnGUI()
{
GUILayout.Label("内容:");
stringToEdit = GUILayout.TextField(stringToEdit,30);
Debug.Log(stringToEdit);
if (GUILayout.Button("读取prefab并修改"))
{
LoadPrefabAndDoSomething("Assets/Resources/abc.prefab", ChangePrefab);
}
}
/// <summary>
/// 通过路径加载预制体,并对预制体进行修改操作保存
/// </summary>
/// <param name="prefabPath">预制体路径</param>
/// <param name="doMethod">可变化的修改方法</param>
private void LoadPrefabAndDoSomething(string prefabPath, Func<GameObject, bool> doMethod)
{
GameObject targetObj = AssetDatabase.LoadAssetAtPath<GameObject>(prefabPath);
bool isChange = doMethod(targetObj);
if (isChange)
{
EditorUtility.SetDirty(targetObj);
AssetDatabase.SaveAssets();//保存
AssetDatabase.Refresh(); //刷新
}
}
private bool ChangePrefab(GameObject targetObj)
{
bool isEdit = false;
Text txt = targetObj.transform.Find("a/Text").GetComponent<Text>();
if (txt.enabled)
{
txt.text = stringToEdit;
isEdit = true;
}
Debug.Log("修改成功");
return isEdit;
}
}
}