白泽图

  • 文章
    • Unity渲染
    • Unity项目开发
    • 工具
    • 数学
    • 算法
    • 网站搭建
    • 网络&操作系统
蒋程个人博客
互联网技术经验总结&分享
  1. 首页
  2. Unity项目开发
  3. 正文

Unity Hierarchy与Scene窗口的操作限制

2023-11-21 3257点热度 1人点赞 0条评论

记录一下在编写编辑器时对unity的一些操作限制,防止遗忘

        static void OnHierarchyGUI(int instanceID, Rect selectionRect)
        {
            var e = UnityEngine.Event.current;

            //禁用 TBCParticleSystem 在Hierarchy面板的右键菜单
            if (selectionRect.Contains(e.mousePosition) && e.button == 1 && e.type <= EventType.MouseUp)
            {
                var ps = Selection.activeGameObject.GetComponent("TBC.TBCParticleSystem");
                if (ps != null)
                {
                    e.type = EventType.Used;
                    return;
                }
            }

            //禁止在编辑器运行过程中在Hierarchy面板[使用快捷键删除]由编辑器创建的 TBCParticleSystem ,用户自己创建的可以删除
            if (e.keyCode == KeyCode.Delete)
            {
                if (Selection.activeGameObject != null)
                {
                    var ps = Selection.activeGameObject.GetComponent("TBC.TBCParticleSystem");
                    if (ps != null)
                    {
                        var assetGUID = (string)TBCEditorExDll.GetReflectionValue(ps.GetType(), "assetGUID", BindingFlags.Public | BindingFlags.Instance, ReflectionType.Property, ps);
                        if (!string.IsNullOrEmpty(assetGUID))
                        {
                            e.type = EventType.Used;
                            return;
                        }
                    }
                }
            }

            //禁止在编辑器运行过程中在Hierarchy面板[使用快捷键复制] TBCParticleSystem
            if (e.modifiers == EventModifiers.Control)
            {
                if (e.keyCode == KeyCode.D)
                {
                    var ps = Selection.activeGameObject.GetComponent("TBC.TBCParticleSystem");
                    if (ps != null)
                    {
                        e.type = EventType.Used;
                        return;
                    }
                }
            }


            //禁止在编辑器打开的时候从Project面板拖拽资源到Hierarchy面板
            if (e.type == EventType.DragUpdated)
            {
                var objectReferences = DragAndDrop.objectReferences;
                for (int i = 0; i < objectReferences.Length; i++)
                {
                    var objectRef = objectReferences[i];
                    if (objectRef?.GetHashCode() > 0)
                    {
                        e.type = EventType.Used;
                        return;
                    }
                }
            }
        }


        //禁止SceneView中选中GameObject
        static void OnSceneGUI(SceneView sceneview)
        {
            var e = UnityEngine.Event.current;
            int controlID = GUIUtility.GetControlID(FocusType.Passive);
            if (e.type == EventType.Layout)
            {
                HandleUtility.AddDefaultControl(controlID);
            }
        }

监听事件

SceneView.duringSceneGui += OnSceneGUI;
EditorApplication.hierarchyWindowItemOnGUI += OnHierarchyGUI;

标签: 暂无
最后更新:2023-11-21

蒋程

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论

COPYRIGHT © 2023 白泽图. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

登录
注册|忘记密码?