Unity层级面板
入坑程序员也差不多一年有余了,但是一直没有养成写博客的良好习惯,这是不好滴,正好心血来潮,记录自己的一次学习心得,也供大家参考学习,大神请绕道走。
完整功能请参考Demo案例。 下载地址
## 主要实现Unity中的Hierarchy层级面板功能
在之前的一次开发中需要实现如上的功能,参考Unity的Hierarchy层级,也参考了网上一些道友的实现思路,已完成了功能模块的开发,现将功能模块提取出来记录,主要实现如下的一些功能:
- 给定对象自动生成层级对象(包含子物体) ;
- 自动刷新层级排序;
- Ctrl多选,Shift多选 ;
- 双击重命名选中对象 ;
- 按下不放拖动改变层级关系;
- 多选同时改变多个对象层级
**生成层级对象** 按照给定对象的父子物体层级生成,根据子物体顺序对应生成子对象,并记录子物体深度作为在层级面板中的层级,再根据层级对应刷新显示,刷新时根据层级对应排序。
private void GenerateHierarchy()
{
// 记录当前在所有层级中的起点
currentCreatIndex = allHierarchyItems.Count;
// 生成层级面板UI初始化
for (int i = 0; i < currentGenerateDatas.Count; i++)
{
GameObject treeObj = Instantiate(hierarchyItem, ItemParent) as GameObject;
treeObj.transform.name = currentGenerateDatas[i].nameID;
treeObj.transform.localPosition = Vector3.zero;
treeObj.transform.localScale = Vector3.one;
treeObj.transform.localRotation = Quaternion.Euler(Vector3.zero);
HierarchyItem tvi = treeObj.GetComponent<HierarchyItem>();
tvi.GameObjID = currentGenerateDatas[i].gameObjID;
tvi.NameID = currentGenerateDatas[i].nameID;
tvi.ChildDeep = currentGenerateDatas[i].childDeep;
tvi.hierarchyText.text = tvi.NameID;
allHierarchyItems.Add(tvi);
// 添加监听事件
UIEventListener.Get(tvi.hierarchyButton).onPress += delegate (GameObject go, bool isPressed)
{
OnClickSelect(treeObj, isPressed);
};
UIEventListener.Get(tvi.