首页 >Unity3D频道 >【你好Unity3D】 > #你好Unity3D#监听Prefab的Apply保存事件
2016
01-15

#你好Unity3D#监听Prefab的Apply保存事件

假如想在Prefab保存的时候做点什么事情的话 ,如下图所示,点击Apply得到监听事件。

Snip20160115_1
代码在这里:

	[InitializeOnLoadMethod]
	static void StartInitializeOnLoadMethod () 
	{
		PrefabUtility.prefabInstanceUpdated = delegate(GameObject instance) 
		{
			//prefab保存的路径
			Debug.Log(AssetDatabase.GetAssetPath(PrefabUtility.GetPrefabParent(instance)));
		};
	}

 

今天脑洞打开。利用这个接口还能干一点事情。 比如 美术修改了prefab没有保存的然后上传svn发现别人什么都更新不到。  这里我可以当美术apply的时候帮他自动保存,于是有了下面的代码。

	[InitializeOnLoadMethod]
	static void Start()
	{
		 PrefabUtility.prefabInstanceUpdated = delegate {
			GameObject go =null;
			if(Selection.activeTransform)
			{
				go  = Selection.activeGameObject;
			}
		 	AssetDatabase.SaveAssets();
			if(go)
			{
			 	EditorApplication.delayCall = delegate {
					Selection.activeGameObject =go;
			 	};
		 	}
		 };

	}

 

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

#你好Unity3D#监听Prefab的Apply保存事件》有 20 条评论

  1. 達芬奇零壹三说:

    您好,请问有办法能让某个prefab变dirty以后不允许保存回退到原状态吗

  2. wzj说:

    fbx文件 代码修改后有办法用代码apply吗

  3. Stephanie说:

    这个有办法拿到 prefab 被保存之前的那个状态么?即在手动apply之前拿到 gameobject 好在保存前做点别的。

  4. bobo说:

    你好啊,我的prefabInstanceUpdated 回调,执行两遍,请问如何解决呢?

  5. sool说:

    有没有apply的代码?相当于 Apply Changes To Prefab

  6. Chiuan说:

    这样会凡是修改一下就报错吧??

  7. 陈玉钢说:

    那如果想在保存之前监听呢?

  8. 马晨说:

    这个脚本是放在某Editor文件夹下还是每个prefab上都要挂一个?

留下一个回复

你的email不会被公开。 必填项已用 * 标注。