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 ...
随机推荐
- Oracle EBS-SQL (SYS-4):sys_职责查询.sql
select t.RESPONSIBILITY_NAME from apps.FND_RESPONSIBILITY_VL t where t.RESPONSIBILITY_NAME like '%MR ...
- core_cm3.c解析
CMSIS是Cortex微控制器软件接口标准(Cortex MicroController Software Interface Standard)的缩写,这个是ARM定制的一个用于Cortex-M系 ...
- 要不要用STL的问题——真理是越辩越明的~
QtWidgets的维护者 Marc Mutz 有一篇博客比较详尽的介绍了 Qt自己的容器.介绍了何时用什么比较好https://marcmutz.wordpress.com/effective-qt ...
- mysql timestamp 值不合法问题
Create Table: CREATE TABLE `RecruitmentDesc` ( `sn` int(11) NOT NULL AUTO_INCREMENT COMMENT '编号(自增字段 ...
- Android之Service与IntentService的比较
Android之Service与IntentService的比较 不知道大家有没有和我一样,以前做项目或者练习的时候一直都是用Service来处理后台耗时操作,却很少注意到还有个IntentServ ...
- 统计分析SQL Server Profiler 跟踪的SQL
--跟踪文件读入到表中分析 SELECT * INTO ZGSJY FROM fn_trace_gettable('E:\wxxcdbprofiler.trc', default); --某时间内,最 ...
- java 笔试
单例设计模式: public class Singliton { //no new private Singliton (){ } static Singliton ins = null; publi ...
- [C#技术参考]在PictureBox 中绘图防止闪烁的办法
开篇之前说点别的,马上年终了,好希望年终奖大大的,但是好像这次项目的展示很重要,所以这几天绷得比较近,但是真的没有感觉烦,就是害怕来不及.所以抓紧了.下面直接正题.说一下用到的东西,都是Google搜 ...
- ROS中编辑文件命令行工具rosed
rosed是rosbash套件中的一个,它允许我们通过包名直接编辑包中的文件,而不是输入包的全部路径. 用法: rosed [package_name] [filename] 例如: rosed ro ...
- mahout算法源码分析之Collaborative Filtering with ALS-WR 并行思路
Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. mahout算法源码分析之Collaborative Filtering with ALS-WR 这个算 ...