零基础入门 41:Hierarchy也可以这样玩

上一篇给大家说了下Inspector如何禁用RectTransform属性修改的做法,今天就来分享下对Hierarchy的另一种操作。

大家在平时的开发需求中,可能会有遇到这样的情况

①、在Hierarchy里,让原本默认显示的一些对象隐藏不显示,但是却真实存在,只不过在Hierarchy里是隐藏不可见的。

②、为Hierarchy里的对象增加一些特殊的文本标识或者显示状态

举个例子,如下图

然后隐藏原本存在的摄像机子对象2-4,注意这里是隐藏,实际真实存在

其中,状态的特殊显示可以如上图中的文本标识,也可以是一张图片,按钮,都可以。

那如何实现呢?

进入正题


和上一篇的准备工作基本一样,创建脚本然后放在Editor目录下,并且增加Using UnityEditor 和 [InitializeOnLoad]

然后

如上图所示,在构造函数中增加对EditorApplication的hierarchyWindowItemOnGUI事件监听。

然后完善监听接口

如上图所示,监听函数需要两个参数,分别为instanceId,还有selectionRect。

每一个游戏中的实例对象都有自己的唯一标识,即InstanceId,然后我们将InstanceId转换为Hierarchy里的游戏对象,并且判断是否存在摄像机组件以及是否是主摄像机,这些检索条件,大家可以根据自己的实际需求进行过滤。

然后对检索到的符合条件的对象增加新的Gui显示。其中通过SelectionRect构造了新的rect,并且绘制了GUI.Label。上述GUILabel的样式,即GUIStyle可以有很多种形式。包括颜色修改等。

对GUI.Label的操作也可以换成其他的如图片,按钮等形式。

然后在主摄像机下检索子对象的数目,因为我要过滤第一个,所以遍历索从1开始,然后把1-3的索引即第2到4个对象进行隐藏设置。

隐藏API为,hideFlags为HideInHierarchy,其他的设置为None即可。

以下动图可以展示这个创建过程。

我在MainCamera下创建了几个游戏对象,第2-3-4个游戏对象都是隐藏的,实际创建了,但是被隐藏在Hierarchy下。之后的才会看得见。

好了,今天的主题分享就到这里,上面的检索条件大家可以根据自己的实际需求来,记下主要的API即可

1、监听事件

2、通过InstacneId转换为游戏对象

3、将selectionRect构造新的rect,增加新的GUIStyle,来完善GUI的绘制显示

4、gameObject的HideFlags的设置。

最后全部代码附上

using UnityEngine;

using UnityEditor;

[InitializeOnLoad]

public class ChangeHierarchy : MonoBehaviour

{

static ChangeHierarchy()

{

EditorApplication.hierarchyWindowItemOnGUI += HierarchyItemOnGUI;

}

private static void HierarchyItemOnGUI(int instanceID, Rect selectionRect)

{

var obj = EditorUtility.InstanceIDToObject(instanceID) as GameObject;

if (obj != null)

{

if (obj.GetComponent<Camera>() != null & obj.tag == "MainCamera")

{

Rect rect = new Rect(selectionRect);

rect.x = rect.width - 90;

rect.width = 100;

rect.y += 2;

var style = new GUIStyle();

style.normal.textColor = Color.green;

GUI.Label(rect, "[我是主摄像机]", style);

if (obj.transform.childCount > 0)

{

for (int i = 1; i < obj.transform.childCount; i++)

{

if (i >= 1 & i <= 3)

obj.transform.GetChild(i).gameObject.hideFlags = HideFlags.HideInHierarchy;

else

obj.transform.GetChild(i).gameObject.hideFlags = HideFlags.None;

}

}

}

}

}

}

好了,大家下期分享见~~~~

原文发布于微信公众号 - 韩东吉的Unity杂货铺(DeveloperJimin)

原文发表时间:2018-03-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java爬坑系列

【JAVA零基础入门系列】Day12 Java类的简单应用

  俗话说的好,实践出真知,所以除了理论知识掌握扎实以外,更重要的是要多加操练,这样才能掌握核心科技。   今天我们就用刚学会的类来实践一下,目标便是完成上一篇...

2259
来自专栏.net core新时代

我是怎么使用最短路径算法解决动态联动问题的

  省市县三级联动问题相信大家都耳熟能详了,选择市下拉选项依赖于省,同样的选择县下拉选项依赖于市。把省市县抽象成三个节点A(省),B(市),C(县),它们的关系...

3229
来自专栏ytkah

利用excel数据透视表实现快速统计相关数据

  昨天ytkah在做数据报表时需要做一些具体统计数字:公司每天都有人申请铅笔、笔记本等一些文具用品,现在想要统计每天申请铅笔多少支、笔记本多少本,如下图所示,...

32010
来自专栏云飞学编程

跟我学爬虫,看大神不到30行代码做的一个简单爬虫!

已经看了那么多基础知识了,下面我们做几个实战项目来挑战一下吧。这次为大家带来,Python爬取校花网美女图片的例子。

2922
来自专栏企鹅号快讯

通过for循环嵌套语法绘制一个漂亮的蜂形图案

利用for循环嵌套画出一个蜂形图案。 代码如下: import turtle #导入小海龟 turtle.bgcolor('blue') #设置背景颜色 ...

2227
来自专栏iOSDevLog

Unity 3D 开发《王者荣耀》:英雄移动地图英雄

2623
来自专栏Golang语言社区

Go语言实现控制台贪吃蛇

各位好 今天在关注GO相关文章的时候,看到一篇关于go语言实现贪吃蛇的文章,原文地址:http://outofmemory.cn ;尝试编译了...

4667
来自专栏小轻论坛

3个少有人知的word小技巧,5秒学会,超实用!

一提到娱乐明星八卦、军事野史鸡汤,大家都迫不及待乖巧等听,哪怕挤出吃饭睡觉时间也要认真关注。提到工作学习技能、素质锻炼提升,很多人就连连摆手一脸抗拒,没时间没精...

682
来自专栏Python攻城狮

爬取拉勾网招聘信息并使用xlwt存入Excel

通过浏览器自带的开发者工具查看是通过Post方式提交的,数据是通过Ajax(异步加载)得到的

904
来自专栏企鹅号快讯

据说看了这篇文章的小伙伴,都找到前端工作了,不信试试看

# 前端工作面试问题 本文包含了一些用于考查候选者的前端面试问题。不建议对单个候选者问及每个问题 (那需要好几个小时)。只要从列表里挑选一些,就能帮助你考查候选...

2827

扫码关注云+社区

领取腾讯云代金券