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 ...
随机推荐
- [问题解决] "Nautilus could not create the required folder "/home/kenneth/.config/nautilus"
错误: "Nautilus could not create the required folder "/home/kenneth/.config/nautilus" 发 ...
- Android 天天爱消除辅助
简介 <天天爱消除>是一款移植于手游的消除类益智游戏,该游戏只有通过手机登录QQ跟微信才能进行,这样一来这款游戏必然会大红大紫. 功能 开发Android自动化触屏事件,录制操作脚本,实现 ...
- 柯南君:看大数据时代下的IT架构(7)消息队列之RabbitMQ--案例(routing 起航)
二.Routing(路由) (using the Java client) 在前面的学习中,构建了一个简单的日志记录系统,能够广播所有的日志给多个接收者,在该部分学习中,将添加一个新的特点,就是可以只 ...
- libcurl get post http
一. 概念 1. 为什么要使用libcurl 1) 作为http的客户端,可以直接用socket连接服务器,然后对到的数据进行http解析,但要 ...
- S3C2440 之SPI
概述: S3C2440有两个串行外设SPI接口,SPI具有全双工通信 SPI方框图 SPI操作: 通过使用SPI接口,S3C2440可以与外部器件同时发送.接收8位数据.当SPI接口为主机时,可以通过 ...
- 素数距离问题_ny_24.java
素数距离问题 时间限制: 3000 ms | 内存限制: 65535 KB 难度: 2 描述 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度.如果左右有等距 ...
- stl之map 排序
排序问题,STL中默认是采用小于号来排序的,因为设置int等类型做key,它本身支持小于号运算,在一些特殊情况,比如关键字是一个结构体,涉及到排序就会出现问题,因为它没有小于号操作,insert等函数 ...
- DataTable去除重复行
//抽取dt中的特定列"Region","Cur","Year"组合成新的dat DataTable dat = dt.DefaultVie ...
- WCF Service Configuration Editor的使用
原文:http://www.cnblogs.com/Ming8006/p/3772221.html 通过WCF Service Configuration Editor的配置修改Client端 参考 ...
- fatal error LNK1123: failure during conversion to COFF: file invalid or corr
新装VS2010出现标题的错误,使用了下面的方法,不行 这个是由于日志文件引起的,可以将 项目\属性\配置属性\清单工具\输入和输出\嵌入清单:原来是"是",改成"否&q ...