var prefab = UnityEditor.PrefabUtility.GetPrefabInstanceHandle(targetGameObject);
if (prefab != null)//判断是否是预制件
{ path = UnityEditor.PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(prefab); }
else
{ Logger.LogError("此物品没有预制:" + targetGameObject); }
下面的方法已经先判断了是预制件
var currentPrefabStage = UnityEditor.Experimental.SceneManagement.PrefabStageUtility.GetCurrentPrefabStage();
if (currentPrefabStage != null)//预制模式下
{
if (currentPrefabStage.scene.isDirty)//预制场景有修改
{
if (EditorUtility.DisplayDialog("温馨提示", "是否先保存保存预制!", "确定", "取消"))
{
PrefabUtility.SaveAsPrefabAsset(currentPrefabStage.prefabContentsRoot, currentPrefabStage.prefabAssetPath);
KeyBdEvent.SaveKey();//保存预制加ctrl+s的保存,由于不晓得如何保存预制场景
return;
}
}
}
else
{
var propertyModifications = PrefabUtility.GetObjectOverrides(referenceCollector.gameObject);
if (propertyModifications.Count > 0)//预制是否有更改
{
if (EditorUtility.DisplayDialog("温馨提示", "是否先保存保存预制!", "确定", "取消"))
{
PrefabUtility.ApplyPrefabInstance(referenceCollector.gameObject, InteractionMode.AutomatedAction);//保存预制修改
return;
}
}
}
//模拟发送按钮
public static class KeyBdEvent
{
[DllImport("user32.dll", EntryPoint = "keybd_event")]
public static extern void keybd_event(
byte bVk, //虚拟键值 对应按键的ascll码十进制值
byte bScan, //0
int dwFlags, //0 为按下,1按住,2为释放
int dwExtraInfo //0
);
public static void SaveKey()
{
keybd_event(17, 0, 0, 0);
//keybd_event(17, 0, 1, 0);//按住ctrl
keybd_event(83, 0, 0, 0);//按下s
keybd_event(17, 0, 2, 0);//抬起ctrl
keybd_event(83, 0, 2, 0);//抬起s
}
}