UIGI 一级二级三级四级啦啦啦等列表层式排列效果
在每个需要排序的物体上放入GridTag 脚本 其中GridTag脚本用于提供此物体的深度
using UnityEngine;
using System.Collections;
using UnityEngine.UI; public class GridTag : MonoBehaviour
{
private int depth = ; public int Depth
{
get
{
return depth;
}
} void Awake()
{
FindDepth(transform); Debug.Log("当前深度"+depth);
} void FindDepth(Transform trans)
{
if (trans.parent != null)
{
depth--;
trans = trans.parent;
FindDepth(trans);
}
}
}
Sorting 通过GridTag 和 其中的深度值 排序
using UnityEngine;
using System.Collections;
using System.Collections.Generic; /// <summary>
/// 给物体排序
/// </summary>
public class Sorting : MonoBehaviour
{
/// <summary>
/// 第一个物体 偏移调节
/// </summary>
public Vector3 startPostion; /// <summary>
/// panel的宽和高
/// </summary>
Vector2 theSize; /// <summary>
/// 横条的背部面板 用于滑动条。。。
/// </summary>
public RectTransform panel; /// <summary>
/// 上一个同深度序列
/// </summary>
private int lastIndex; void Start()
{
Sort();
} //void Update()
//{
// Sort(this.gameObject); //} /// <summary>
/// 获取物体下的GridTag数组 并且 对gameObj 下的物体进行排列
/// </summary>
/// <param name="gameObj">父物体</param>
public void Sort()
{
float height = ; GridTag[] gridTags; RectTransform[] gridRect; int[] depthList; gridTags = gameObject.GetComponentsInChildren<GridTag>(); gridRect = new RectTransform[gridTags.Length]; depthList = new int[gridTags.Length]; //DepthSort(gridTags, depthIndex, ref depthList);
Depth_RectList(gridTags, gridRect, depthList); //PositionSort(height, gridTags, depthList);
SizeControl(gridRect); SortPosition(height, gridTags, gridRect, depthList); } /// <summary>
/// 排列物体下 含GridTag 的位置
/// </summary>
private void SortPosition(float height, GridTag[] gridTags, RectTransform[] gridRect, int[] depthList)
{
//遍历所有要排列的物体
for (int i = ; i < gridTags.Length; i++)
{
//如果横条的深度值为最大 即为第一级 判断其位置
if (gridTags[i].Depth == depthList[])
{
height = ;
for (int b = ; b < i; b++)
{
height += gridRect[b].sizeDelta.y;
}
//transform.GetChild(i).GetComponent<RectTransform>().anchoredPosition3D = new Vector3(918, transform.GetChild(i).GetComponent<RectTransform>().sizeDelta.y * (-0.5f - i), 0);
gridRect[i].anchoredPosition3D = startPostion + new Vector3(, -height - gridRect[i].sizeDelta.y / , );
}
//如果横条上一个为同级 向下排列
else if (gridTags[i].Depth == gridTags[i - ].Depth)
{
gridRect[i].anchoredPosition3D = gridRect[i - ].anchoredPosition3D - new Vector3(, gridRect[i].sizeDelta.y, );
}
//如果横条的深度值低于上一个 即为同一级中第一个
else if (gridTags[i].Depth < gridTags[i - ].Depth)
{
gridRect[i].anchoredPosition3D = new Vector3(, -(gridRect[i - ].sizeDelta.y + gridRect[i].sizeDelta.y) / , );
}
//如果横条深度大于上一个 即2 3 2 中第二个2 则按下面方式排列
else if (gridTags[i].Depth > gridTags[i - ].Depth)
{
for (int a = i - ; a > ; a--)
{
if (gridTags[a].Depth == gridTags[i].Depth)
{
lastIndex = a;
break;
}
}
Debug.Log("上层序列:" + lastIndex); height = gridRect[i - ].sizeDelta.y * (i - lastIndex - ) + gridRect[i].sizeDelta.y; gridRect[i].anchoredPosition3D = gridRect[lastIndex].anchoredPosition3D + new Vector3(, -height, );
}
}
} /// <summary>
/// 控制横条面板的宽和高
/// </summary>
/// <param name="gridRect"></param>
private void SizeControl(RectTransform[] gridRect)
{
theSize.y = ;
theSize.x = panel.sizeDelta.x; foreach (var item in gridRect)
{
theSize.y += item.sizeDelta.y;
} if (theSize.y < transform.parent.GetComponent<RectTransform>().sizeDelta.y)
theSize.y = transform.parent.GetComponent<RectTransform>().sizeDelta.y; panel.sizeDelta = theSize;
} /// <summary>
/// 通过GridTag数组 获取深度和Rect数组
/// </summary>
private void Depth_RectList(GridTag[] gridTags, RectTransform[] gridRect, int[] depthList)
{
for (int i = ; i < gridTags.Length; i++)
{
depthList[i] = gridTags[i].Depth;
gridRect[i] = gridTags[i].GetComponent<RectTransform>(); Debug.Log("第" + i + "个," + "当前深度:::" + depthList[i]);
}
}
}
UIGI 一级二级三级四级啦啦啦等列表层式排列效果的更多相关文章
- Hibernate的一级二级缓存机制配置与测试
特别感谢http://www.cnblogs.com/xiaoluo501395377/p/3377604.html 在本篇随笔里将会分析一下hibernate的缓存机制,包括一级缓存(session ...
- Hibernate 一级二级缓存
1.一级缓存与session关联,session关闭时,缓存数据消失: 2.一级缓存无法自我控制缓存的数量,需考虑缓存溢出: 3.二级缓存与sessionFactory关联,当sessionFacto ...
- phpcms v9 下拉菜单 二级 三级子栏目调用方法
很多网站的导航栏可以实现下拉二级菜单,三级菜单等效果,今天我们就来分享phpcms v9 支持下拉菜单的方法,可以支持无限子栏目调用,具体写法如下: <ul> {pc:content ac ...
- 关于expanded一级二级菜单数据的分组排序
最新再弄关于expandedlistview相关的东西,所以需求是需要对一级菜单根据时间排序,同时二级菜单也需要根据时间排序,距离现在最近的时间显示在最前面. 效果就是如下: --group2 -- ...
- 省市县 三级 四级联动Javascript JQ 插件PCASClass.js
想要使用这款组件,需要页面引入 PCASClass.js 核心文件,该文件在您的HTML文档<head>标签之内. <script type="text/javascrip ...
- crm 动态一级二级菜单
之前代码菜单是写是的 如何 让他 动态 生成了 首先 添加 2个字段 admin.py 更改 显示 from django.contrib import admin from rbac import ...
- Mybatis学习(五)————— 延迟加载和缓存机制(一级二级缓存)
一.延迟加载 延迟加载就是懒加载,先去查询主表信息,如果用到从表的数据的话,再去查询从表的信息,也就是如果没用到从表的数据的话,就不查询从表的信息.所以这就是突出了懒这个特点.真是懒啊. Mybati ...
- Mybatis(五) 延迟加载和缓存机制(一级二级缓存)
踏踏实实踏踏实实,开开心心,开心是一天不开心也是一天,路漫漫其修远兮. --WH 一.延迟加载 延迟加载就是懒加载,先去查询主表信息,如果用到从表的数据的话,再去查询从表的信息,也就是如果没用到从表的 ...
- Mybatis五(一级二级缓存、第三方缓存)
一级缓存 Mybatis对缓存提供支持,但是在没有配置的默认情况下,它只开启一级缓存,一级缓存只是相对于同一个SqlSession而言.所以在参数和SQL完全一样的情况下,我们使用同一个SqlSess ...
随机推荐
- Android XListView实现原理讲解及分析
XListview是一个非常受欢迎的下拉刷新控件,但是已经停止维护了.之前写过一篇XListview的使用介绍,用起来非常简单,这两天放假无聊,研究了下XListview的实现原理,学到了很多,今天分 ...
- centos 6.7 perl 5.22 安装DBD 需要使用老的perl版本
zjzc01:/usr/bin# mv perl.bak perlold zjzc01:/usr/bin# cd zjzc01:/root# cd DBD-Oracle-1.36 zjzc01:/ro ...
- IOS开发环境更换后重新制作Provisioning Profile证书详解
新换了台Macbook,又折腾了一遍Provisioning Profile证书,苹果的证书繁锁复杂,每次制作都相当麻烦,而且Provisioning Profile证书是与设备绑定的,所以更换开发环 ...
- UML的基本图(一)
A class diagram shows a set of classes, interfaces, and collaborations and their relationships. T ...
- html 中的name,id ,value,class,list 作用与区别
name: 单独一个网页中,一个控件是否设置name不会影响这个网页功能的实现.当我们需要把这个控件 所关联的数据传递到数据库时,就必须设置name属性,否则这个值是没办法传到服务器保存的: id: ...
- JavaScript引用类型之Array数组的拼接方法-concat()和截取方法-slice()
1.concat() 基于当前数组中的所有项创建一个新数组(也就是副本),然后将接收到的参数添加到副本的末尾,最后返回新构建的数组.也就是说,concat()在向数组中追加元素时,不会改变原有数组 ...
- Excel几个常用操作
1.冻结第一行:视图->冻结窗格->冻结首行 2.第一行自动筛选:选择要设置的行,数据->筛选->自动筛选 3.在单元格中添加下拉菜单:(1)选中一列,数据->数据验证. ...
- Method Swizzle黑魔法,修改 ios 系统类库方法 SEL IMP
Method Swizzle黑魔法,修改 ios 系统类库方法 版权声明:本文为博主原创文章,未经博主允许不得转载. 一般来说,系统提供的方法已经足够开发了,但是有的时候有些需求用普通方法不好做. ...
- wcf客户端 cookie
public class CookieBehavior:IEndpointBehavior { private string _cookie; #region 构造函数 重载+2 public Coo ...
- scala io,ubuntu常见配置
Ubuntu的scala环境配置 配置scala环境变量同时需要配置java的环境变量 配置方法: 1.先下载linux的相应版本的jdk与scala的二进制压缩包并解压. 解压方法: 先到jdk ...