[Unity Editor]10行代码搞定Hierarchy排序_起个名字真的好难啊的博客-程序员宅基地_unity hierarchy排序

技术标签: Unity 编辑器扩展  

  在日常的工作和研究中,当给我们的场景摆放过多的物件的时候,Hierarchy面板就会变得杂乱不堪。比如这样:

    过多的层次结构充斥在里面,根层的物件毫无序列可言,整个层次面板显示非常的杂乱不堪,如果还有使用代码添加的物件,那就更加的惨不忍睹。里面的物件没有任何的规律可言(当然如果你们的美术有强迫症的话,也许会把物件分类,按规律排列的整齐,如果不是就惨了)。如果费时费力的排列好里面的结构,过一段时间就又会变乱。
    而如果要在杂乱的层次结构中找到我们想要的物体就需要费些体力和眼神了,就如同在垃圾堆里找宝石一样。

如果Hierarchy能按字母排序的话,那该多好!一个简单的字母排序,就会让整个结构看起来都是规规矩矩、整整齐齐。不论怎样也都会好过没有排序的。
比如下面这样:

别放弃,天无绝人之路,想让Hierarchy按字母排序,非常的简单,整个文件只有10行代码,其中using xxx占用了2行,符号占用2行,类名和函数名各1行,真正工作的代码只有4行。
代码结构就是下面这样

效果就是下面这个样子


哈哈,不逗你了,下面开始说正经事了!!!



这是按字母升序排列

public class AscendingSort : BaseHierarchySort {
    public override int Compare( GameObject lhs , GameObject rhs) {
        if (lhs == rhs) { return 0; }
        if (lhs == null) { return -1; }
        if (rhs == null) { return 1; }
        return EditorUtility .NaturalCompare( lhs.name , rhs.name);
    }
}

按字母降序排列

publicclassDescendingSort:BaseHierarchySort{
    publicoverrideintCompare(GameObjectlhs,GameObjectrhs){
        if(lhs==rhs){return0;}
        if(lhs==null){return1;}
        if(rhs==null){return-1;}
        returnEditorUtility.NaturalCompare(rhs.name,lhs.name);
    }
}

按InstanceID排序

public class InstanceIDSort : BaseHierarchySort {
    public override int Compare( GameObject lhs , GameObject rhs) {
        if (lhs == rhs) { return 0; }
        if (lhs == null) { return -1; }
        if (rhs == null) { return 1; }
        return lhs .GetInstanceID(). CompareTo(rhs .GetInstanceID());
    }
}


按HashCode排序

public class HashCodeSort:BaseHierarchySort{
    publicoverrideintCompare(GameObjectlhs,GameObjectrhs){
        if(lhs==rhs){return0;}
        if(lhs==null){return-1;}
        if(rhs==null){return1;}
        returnlhs.GetHashCode().CompareTo(rhs.GetHashCode());
    }
}

InstanceID排序与HashCode排序是一样的,没有看出其中的差异。

当然除了排序,我们还可以干点其他的,比如把排序下拉框改成中文的,一样很简单,如下
如果想要你的下拉选项变成中文的,没关系一样可以搞定(以升序排列为例),如下

public class 升序排列: BaseHierarchySort {
    public override int Compare( GameObject lhs , GameObject rhs) {
        if (lhs == rhs) { return 0; }
        if (lhs == null) { return -1; }
        if (rhs == null) { return 1; }
        return EditorUtility .NaturalCompare( lhs.name , rhs.name);
    }
}

别担心,Unity的类名是可以使用中文名的,你就大胆的使用吧。

如果你不满足于只是下拉选择框是中文的,还希望上面的图标也变成中文,没关系,一样可以搞定,只需复写一下content就可以了

public class 升序排列:BaseHierarchySort
{
    publicoverrideintCompare(GameObjectlhs,GameObjectrhs)
    {
        if(lhs==rhs){return0;}
        if(lhs==null){return-1;}
        if(rhs==null){return1;}
        returnEditorUtility.NaturalCompare(lhs.name,rhs.name);
    }
    publicoverrideGUIContentcontent{
        get{returnnewGUIContent("升序");}
    }
}

显示图片也是没有问题的哦,给个图文混合显示的吧

public class AscendingSort:BaseHierarchySort{
    privatereadonlyGUIContent_content;
 
    publicAscendingSort(){
        Texture2Dimage=Resources.Load<Texture2D>("Fire");
        if(image){
            _content=newGUIContent("升序",image,"升序排列");
        }
        else{
            _content=newGUIContent("升序","升序排列");
        }
    }
 
    publicoverrideGUIContentcontent{
        get{return_content;}
    }
    publicoverrideintCompare(GameObjectlhs,GameObjectrhs){
        if(lhs==rhs){return0;}
        if(lhs==null){return-1;}
        if(rhs==null){return1;}
        returnEditorUtility.NaturalCompare(lhs.name,rhs.name);
    }
}


当然上面的也可以换成自定义的图片,自定义文字,自定义图片+文字,也可以给与美术进行提示等等。全部只看你返回的是一个什么样的content了,这里就不做更多的介绍了

项目工程下载地址 https://github.com/sevenfires/HierarchySort.git

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/e295166319/article/details/60140466

智能推荐

无人机上仅使用CPU实时运行Yolov5?(OpenVINO帮你实现)(上篇)_阿木实验室的博客-程序员宅基地

Intel CPU在运行视觉导航等算法时实时性要优于Nvidia等平台,如Jetson Tx2,NX。而Nvidia平台在运行深度学习算法方面具有很大优势,两种平台各有利弊。但是,Intel OpenVINO的推出允许NUC平台实时运行深度学习模型,如目前最流行的目标检测程序Yolov5,这样就太好了,仅使用Intel无人机平台就可以完成各种任务。本教程将教你用Prometheus在Intel无人机平台部署Yolov5目标检测。先来个速度测试,仅使用Intel CPU,没有模型压缩与剪枝等算法,也不依赖

2015 多校 #5 1005 MZL's chemistry_weixin_30652897的博客-程序员宅基地

MZL's chemistryTime Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1306Accepted Submission(s): 601Problem Description MZL de...

关于html隐藏标签的问题_rainfriday3的博客-程序员宅基地_html jsp hidden inline none

库存数量: 只要在td标签后加上style="display:none" 既可以隐藏td标签中的内容

COBOL语言初级教程(1)--COBOL简介(续)_大可山人的博客-程序员宅基地

(续)ANSI COBOL于1985年发布COBOL-85标准。后X3J4更名为J4,负责处理COBOL语言的发展标准化。2002年,发布COBOL 2002标准。该标准新特性包括:· User Defined Functions· Object Orientation· National Characters - Unicode· Multiple Currency Symbols· Condi

安装最新的GCC_深度Java的博客-程序员宅基地_gnu.org下载太慢

GCC版本低了会出错,导致头文件不能解析,需要升级GCC。一、下载gcc最新源码包#wget http://ftp.gnu.org/gnu/gcc/gcc-9.3.0/gcc-9.3.0.tar.gz二、解压缩#tar -xzvf gcc-9.3.0.tar.gz三、进入解压缩目录#cd gcc-9.3.0四、运行download_prerequisites脚本,这个脚本..._1671465600

随便推点

ST_LINK/V2 SWIM和SWD、JTAG下载口说明_MULTISENSOR的博客-程序员宅基地_st-link2 a2022 swim

LED状态说明闪烁红色:ST-LINK/V2连接到计算机后,第一次USB枚举过程红色:ST-LINK/V2与计算机已建立连接闪烁绿色/红色:目标板和计算机在进行数据交换绿色:通讯完成橙色(红色+绿色):通讯失败-------------------------------------------------------------------------------------

android通过广播来扫描sdcard里面的音频信息_csh159的博客-程序员宅基地

下面猪的Activity中的代码:package com.zte.broadcastReceiverMediaScanner;import java.io.File;import android.app.Activity;import android.content.Intent;import android.content.IntentFilter;import

实用且堪称神器的Chrome插件推荐_dev_zyx的博客-程序员宅基地

前言相信很多人都在使用 Chrome 浏览器,其流畅的浏览体验得到了不少用户的偏爱,但流畅只是一方面, Chrome 最大的优势还是其支持众多强大好用的扩展程序(Extensions)。最近为了更好的利用谷歌浏览器,博主整理了一些常用的谷歌插件,分享给大家,考虑到一些无法翻墙的童鞋,给力的博主当然是顺便给出离线安装文件。正文闲话不多说,直接上推荐的插件,可...

合并不同行列矩阵_运算结果为零的博客-程序员宅基地_不等长矩阵合并怎么做

for i=1:10sst=ncread('路径',‘sst’);sst1{1,i}=sst;end%大括号可以合并不同行列的矩阵,并且想要调出某个矩阵时,只需要写第几个矩阵;中括号只能合并相同行列矩阵,并且调用某个矩阵时,需要知道此矩阵的行区间和列区间。...

网页设置固定宽度的方法_coharder的博客-程序员宅基地_页面宽度设置为固定值

<br />      这一段一直在研究PHP,小有心得,看了一本教程,准备写一个php的小型内容管理系统来练练手,做页面的时候,忽然记得以前自己看过一个视频,说主页可以设定一个固定的宽度,居中,这个是用css来实现的,然后其他的东西都是在这个范围之内的。找了很多资料,都没找到,实验了很多次也都不成功,最后还是找到了,原来是在body体内,加上:margin:0 auto 这句话。<br />      通过昨天一天的摸索,对css也有了一个全新的认识,自己想要的布局和颜色设置基本都能搞定,用css的确比较

mysql 坑记之一_MaraSun的博客-程序员宅基地_mysql 索要失效

最近公司的mysql竟然遭到了黑客的光顾,索要bitcoin! 虽然很少,但是足以暴露出黑手们是贼不走空的,多么小的网站都不放过.因此,迫不得已,只好开始慢慢调整mysql的安全使用方法,又踩了不少坑,本文记录一下.1、workbench 错误的正确理解,如图返回的错误笔者一直认为是配置有问题,各种检查,各种授权,其实是密码错误。因此,当你做了很多操作之后,仍然出现这个错误,请仔细检查你的密码。2、授权的坑明明Grant 各种权限,查询权限表各项,都是No。别急这个No 不是授权不成功,这个No的

推荐文章

热门文章

相关标签