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 ...
随机推荐
- C# 常用函数和方法集
1.DateTime 数字型 System.DateTime currentTime=new System.DateTime(); 1.1 取当前年月日时分秒 currentTime=System. ...
- java学习之三种常用设计模式
一.适配器设计模式 简单来说,就是通过一个间接类来选择性的来覆写一个接口 interface Window{ public void open() ; // 打开窗口 public void clos ...
- Android Resource介绍和使用
1. 相关文件夹介绍 文件 取值方式 string.xml getResource().getString(resourceId)或者getResource().getText(resourceId) ...
- [置顶] PHP如何扩展和如何在linux底层对php扩展?
虽然大部分php工程师都不需要知道php的C代码核心是如何运作的,有些人可能知道有个dl()函数.或者使用过一些第三方的类库,这些正是本文的重点之一. 希望对那些想把php带向更 ...
- 栈的实现 -- 数据结构与算法的javascript描述 第四章
栈 :last-in-first-out 栈有自己特殊的规则,只能 后进入的元素 ,最先被推出来,我们只需要模拟这个规则,实现这个规则就好. peek是返回栈顶元素(最后一个进入的). /** * 栈 ...
- IOS7 position:fixed 定位问题
在IOS7下position:fixed定位会出一些bug. 输入框 focus 状态下 fixed会随之改变.参见该页面详细描述(http://www.cnblogs.com/zhangdaipin ...
- MySQL学习笔记(4)
插入记录① INSERT [INTO] tbl_name [(col_name,-)] {VALUES | VALUE} ({expr | DEFAULT},-),(-),- 可以用表达式或者DEFA ...
- android入门——UI(4)
GridView控件实现菜单 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xml ...
- XStream和Json
XStream的作用 XStream可以把JavaBean对象转换成XML! 通常服务器向客户端响应的数据都是来自数据库的一组对象,而我们不能直接把对象响应给响应端,所以我们需要把对象转换成XML再响 ...
- osg项目经验1<MFC+OSG中模型点选效果>
点选主要是重载osg的GUIEventHandler, class CPickHandler : public osgGA::GUIEventHandler{ //自定义回调函数名:CPickHand ...