利用PropertyModification,在Prefab中保存额外属性信息。
示例
using UnityEngine;
using UnityEditor;
using System;
using System.IO;
using System.Collections;
public class MenuEditor {
[MenuItem("Tool/PrefabUtility.SetPropertyModifications")]
static void SetPropertyModifications()
{
GameObject tar = Selection.activeObject as GameObject;
TestPrefab test = tar.GetComponent<TestPrefab>();
GameObject subPrefab = test.subPrefab;
PropertyModification[] pms = new PropertyModification[1];
PropertyModification pm = new PropertyModification();
pm.target = test;
pm.objectReference = subPrefab;
pm.propertyPath = "propertyName";
pm.value = "propertyValue";
pms[0] = pm;
PrefabUtility.RecordPrefabInstancePropertyModifications(tar);//设置撤销点
PrefabUtility.SetPropertyModifications(tar, pms);//保存额外属性修改信息
AssetDatabase.SaveAssets();
AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate);
}
[MenuItem("Tool/PrefabUtility.GetPropertyModifications")]
static void GetPropertyModifications()
{
GameObject tar = Selection.activeObject as GameObject;
PropertyModification[] pms = PrefabUtility.GetPropertyModifications(tar);
}
}
用Notepad++打开修改后的prefab文件可以看到以下信息
Prefab:
m_ObjectHideFlags: 1
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 11492202}
propertyPath: propertyName
value: propertyValue
objectReference: {fileID: 127220, guid: 4d3b8ae75960389438056bc346026994, type: 2}
m_RemovedComponents: []
m_ParentPrefab: {fileID: 0}
m_RootGameObject: {fileID: 122404}
m_IsPrefabParent: 1
m_IsExploded: 1