一,创建和打断关联
/// <summary>
/// 创建关联
/// </summary>
private void CreateLink()
{
if (null == m_objLinkPrefab)
{
Debug.LogError("关联关系记录错误!!!!!!");
return;
}
#if UNITY_EDITOR
string strPrefabPath = PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(m_objLinkPrefab);
if (string.IsNullOrEmpty(strPrefabPath))
{
Debug.LogError("无法查找关联预制体路径!!!!!!");
return;
}
PrefabUtility.SaveAsPrefabAssetAndConnect(this.gameObject, strPrefabPath, InteractionMode.AutomatedAction);
#endif
}
/// <summary>
/// 打断关联
/// </summary>
private void UnPackLink()
{
#if UNITY_EDITOR
m_objLinkPrefab = PrefabUtility.GetCorrespondingObjectFromSource(this.gameObject);
if (null == m_objLinkPrefab)
{
Debug.LogError("关联关系记录错误,停止断连预制体!!!!!!");
return;
}
PrefabUtility.UnpackPrefabInstance(this.gameObject, PrefabUnpackMode.Completely, InteractionMode.AutomatedAction);
AssetDatabase.SaveAssets();
#endif
}
二,apply (保存)预制体
if (PrefabUtility.GetPrefabType(objGo) == PrefabType.PrefabInstance)
{
UnityEngine.Object parentObject = PrefabUtility.GetPrefabParent(objGo);
if (parentObject != null)
{
PrefabUtility.ReplacePrefab(objGo, parentObject, ReplacePrefabOptions.ConnectToPrefab);
AssetDatabase.Refresh();
}
if(objGo != null)
{
GameObject.DestroyImmediate(objGo);
}
}