拓展编辑器_组件不可编辑
Posted llllllvty
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了拓展编辑器_组件不可编辑相关的知识,希望对你有一定的参考价值。
在Unity中,我们可以给组件设置状态,比如无法编辑的状态。以Transform组件为例,我们可以将Transform组件的原始功能禁掉。代码如下:
using UnityEngine; using UnityEditor; using System.Reflection; [CustomEditor(typeof(Transform))] public class 组件不可编辑:Editor { private Editor m_Editor; private void OnEnable() { m_Editor = Editor.CreateEditor(target, Assembly.GetAssembly(typeof(Editor)).GetType( "UnityEditor.TransformInspector", true)); } public override void OnInspectorGUI() { if (GUILayout.Button("拓展按钮上")) { } //开始禁止 GUI.enabled = false; m_Editor.OnInspectorGUI(); //禁止结束 GUI.enabled = true; if (GUILayout.Button("拓展按钮下")) { } //base.OnInspectorGUI(); } }
同样的,先使用反射获取Transform组件,然后通过GUI.enabled=false方法将Transform组件禁用掉,这样Transform组件将无法再编辑,效果如下:
此时Transform组件的原始功能被禁掉(灰色表示不可编辑),但是这并不影响我上下拓展的两个按钮。
那么我们是否可以自己选择是否禁掉这个组件呢,当然是可以的,代码如下:
using UnityEngine; using UnityEditor; public class 组件不可编辑2 { [MenuItem("GameObject/3D Object/Lock/Lock", false, 0)] static void Lock() { if (Selection.gameObjects != null) { foreach (var gameObject in Selection.gameObjects) { gameObject.hideFlags = HideFlags.NotEditable; } } } [MenuItem("GameObject/3D Object/Lock/UnLock", false, 1)] static void UnLock() { if (Selection.gameObjects != null) { foreach (var gameObject in Selection.gameObjects) { gameObject.hideFlags = HideFlags.None; } } } }
效果如下:
此时我们可以选择任意的游戏对象,然后从右键菜单中选择3D Object->Lock->Lock(锁定)或者UnLock(解锁)。它的原理就是设置游戏对象的hideFlags。需要说明的是,我们不一定非要设置游戏对象的hideFlags,也可以单独给某个组件设置hideFlags,这样只会影响到某一组件而非全部。
ps:HideFlags可以使用按位或(|)同时保持多个属性,其含义都很好理解,大家可以自行输入代码调试一下
HideFlags.None 清除状态
HideFlags.DontSave 设置对象不会被保存(仅编辑模式下使用,运行时剔除)
HideFlags.DontSaveInBuild 设置对象构建后不会被保存
HideFlags.DontUnloadUnuesdAsset 这只对象不会被Resources.UnloadUnusedAsset()卸载无用资源时卸掉
HideFlags.HideAndDontSave 设置对象隐藏,应且不会被保存
HideFlags.HideInHierarchy 设置对象在层次视图中隐藏
HideFlags.HideInInspector 设置对象在控制面板视图中隐藏
HideFlags.NotEditable 设置对象不可编辑
以上是关于拓展编辑器_组件不可编辑的主要内容,如果未能解决你的问题,请参考以下文章
Atom编辑器折腾记_(15)JS代码片段补全(插件:javascript-snippets)