拓展编辑器
Posted llllllvty
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了拓展编辑器相关的知识,希望对你有一定的参考价值。
监听事件
这个是拓展Project视图的最后一节,这里将会介绍一下如何借助程序来约束project视图中的资源。例如用程序来判断资源的原始位置以及将要移动的位置是否合法,从而决定是否能阻止本次移动。Unity为此提供了监听的基类。
using UnityEngine; using UnityEditor; public class Script_04: UnityEditor.AssetModificationProcessor { [InitializeOnLoadMethod] static void InitializeOnLoadMethod() { //全局监听Project视图下的资源是否发生变化(添加,删除和移动) EditorApplication.projectChanged += delegate () { Debug.Log("change"); }; } //监听"双击鼠标左键,打开资源"事件 public static bool IsOpenForEdit(string assetPath, out string message) { message = null; Debug.LogFormat("assetPath:{0}", assetPath); //true标识该资源可以打开,false标识不允许在Unity中打开该资源 return true; } //监听"资源即将被创建"事件 public static void OnWillCreateAsset(string path) { Debug.LogFormat("path:{0}", path); } //监听"资源即将被保存"事件 public static string[] OnWillSaveAsset(string[] paths) { if (paths != null) { Debug.LogFormat("path:{0}", string.Join(",", paths)); } return paths; } //监听"资源即将被移动"事件 public static AssetMoveResult OnWillMoveAsset(string oldPath, string newPath) { Debug.LogFormat("from:{0} to:{1}", oldPath, newPath); //AsserMoveResult.DidMove return AssetMoveResult.DidMove; } //监听"资源即将被删除"事件 public static AssetDeleteResult OnWillDeleteAsset(string assetPath, RemoveAssetOptions opint) { Debug.LogFormat("delete:{0}", assetPath); //AssetDeleteResult.DidNotDelete表示该资源可以被删除 return AssetDeleteResult.DidNotDelete; } }
这个类需要继承UnityEditor.AssetModificationProcessor,然后重写监听资源创建,移动,保存和删除的方法,处理自己的特殊逻辑。
以上是关于拓展编辑器的主要内容,如果未能解决你的问题,请参考以下文章