位置: 编程技术 - 正文

也论UIGrid(也论主板的扩展性)

编辑:rootadmin

推荐整理分享也论UIGrid(也论主板的扩展性),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:也论犯罪两分法,也论功增封食邑,共皇家万古长春,也论中国的抗美援朝,也论英雄作文500字,也论犯罪两分法,也论教养,也论英雄,也论教养,内容如对您有帮助,希望把文章链接给更多的朋友!

之前网上有篇文章,是讲创建高效的超大Scroll view,其思路就是将没在clip范围内的item进行setactive(false),反之则setactive(true),这样item很多也可以流畅的滑动。

他是改造的UIWarpContent.cs。也就是循环列表那个例子里的脚本,不过它参数没有UIGrid多,想了一想,还是改UIGrid更快。现在就讲讲怎么改动UIGrid以达到同样的效果。

UIScrollView mScroll;//增加这一行,用来保存UIScrollView组件 (行)protected virtual void Start (){if (!mInitDone) Init();bool smooth = animateSmoothly;animateSmoothly = false;Reposition();animateSmoothly = smooth;enabled = false;

//增加部分,就是给UIPanel的onClipMove注册这边的处理事件,这个事件在列表被拖动时会触发 mScroll = mPanel.GetComponent<UIScrollView>(); if (mScroll != null) { //Debug.Log(transform.parent &#;"`s grid reg OnMove"); mScroll.GetComponent<UIPanel>().onClipMove &#;= OnMove; }}

也论UIGrid(也论主板的扩展性)

然后就是具体操作,这两个函数写在UIGrid类里的最后面就行了

protected virtual void OnMove(UIPanel panel) { WrapContent(); } public void WrapContent() { //EX(为支持多个item,禁用不显示item) //Debug.Log("call "&#;transform.parent.name&#;"`s WrapContent"); Transform myTrans = transform; Vector3[] corners = mPanel.worldCorners; for (int i = 0; i < 4; &#;&#;i) { Vector3 v = corners[i]; v = myTrans.InverseTransformPoint(v);//把clip rect的四个角变换到grid的坐标系 corners[i] = v; } Vector3 center = Vector3.Lerp(corners[0], corners[2], 0.5f);//左下和右上角的取半,就是clip rect的中心 //Debug.Log(myTrans.parent.name&#;" child count:" &#; myTrans.childCount); if (arrangement == Arrangement.Horizontal) { float min = corners[0].x - cellWidth;//最小&#;:左下角x减去一个item的宽度 float max = corners[2].x &#; cellWidth;//最大&#;:右上角x加上一个item的宽度 for (int i = 0; i < myTrans.childCount; &#;&#;i) { Transform t = myTrans.GetChild(i); Vector3 tmpPos = t.position; tmpPos = myTrans.InverseTransformPoint(tmpPos); float distance = tmpPos.x;// -center.x; if (true) { //distance &#;= mPanel.clipOffset.x - myTrans.localPosition.x; //Debug.Log("H name:" &#; t.name &#; " min:" &#; min &#; " dis:" &#; distance &#; " max:" &#; max); if (!UICamera.IsPressed(t.gameObject)) { Transform g = t.FindChild("children");//这后面的代码要结合自身情况改 if (g != null && g.childCount == 0) NGUITools.SetActive(t.gameObject, (distance > min && distance < max), false); } } } } else { float min = corners[0].y - cellHeight; float max = corners[2].y &#; cellHeight; for (int i = 0; i < myTrans.childCount; &#;&#;i) { Transform t = myTrans.GetChild(i); Vector3 tmpPos = t.position; tmpPos = myTrans.InverseTransformPoint(tmpPos); float distance = tmpPos.y;// -center.y; if (true) { //distance &#;= mPanel.clipOffset.y - myTrans.localPosition.y; //Debug.Log("V name:" &#; t.name &#; " min:" &#; min &#; " dis:" &#; distance &#; " max:" &#; max); if (!UICamera.IsPressed(t.gameObject)) { Transform g = t.FindChild("children");//这后面的代码要结合自身情况改 if(g!=null && g.childCount == 0) NGUITools.SetActive(t.gameObject, (distance > min && distance < max), false); } } } } // }

我这个不具有通用性,因为我这个是多级列表,它判断了一下UIGrid所在的对象是否是列表的叶节点,因为只有叶节点才能这样处理,有子物体的节点不能被隐藏,否则子物体全看不到了,就是你拖着拖着,列表一下全没了。。。

总之就是把UIPanel的clip的范围和每一个item的坐标都变换到同一个坐标系下,然后比较item是不是在clip的范围里,以决定隐藏还是显示。

不过这样最好不要在item的脚本里执行协程,不然一setactive(false)协程就断了

Unity3D之NGUI入坑<二> 乱斗西游效果图如下:首先对这个界面分析了一下,有两种:猜测1.可能是用2D模拟实现的伪3D,只是通过大小,角度的变换实现了3D旋转的效果。猜测2.

Unity3D 相机控制 ///summary///CreatedbyHongYouwei///Createdin.1////summaryusingUnityEngine;usingSystem.Collections;publicclassCameraControl:MonoBehaviour{publicfloatdistanceAway=3.0f;//相机和人的水平距离p

Unity之一天一个技术点(十四)---通过鼠标控制镜头绕着某物体旋转 usingUnityEngine;usingSystem.Collections;/***备注:本脚本必须赋予主镜头*/publicclassCameraRotateAround:MonoBehaviour{publicTransformtarget;//主相机要围绕其旋转的物体publicfloa

标签: 也论主板的扩展性

本文链接地址:https://www.jiuchutong.com/biancheng/378863.html 转载请保留说明!

上一篇:Unity3D开发(一):NGUI之UIRoot屏幕分辨率自适应(unity3d开发流程)

下一篇:Unity3D之NGUI入坑<二>(u3d unity3d)

  • 供暖服务费增值税怎么算
  • 居民个人取得境内、境外所得,如何计算应纳税额?
  • 实际退税额怎么算
  • 失控发票账务处理
  • 海关进口增值税怎么计算
  • 注册资本印花税怎么交?什么时候交?
  • 研发人员差旅费可以资本化吗
  • 建筑劳务公司的工资计入什么科目
  • 租赁合同印花税率
  • 处置使用过的车辆
  • 发票章没盖在盖章处
  • 民办非企业单位属于什么类型
  • 外经证预交几个点
  • 高新技术企业如何查询
  • 金融资产摊余成本例题
  • 车辆报废收入如何处理
  • 用党委经费买的固定资产如何计提?
  • 分销佣金分配
  • 劳保统筹费用
  • 公司工资发放错误怎么退回
  • 哪些发票不可进行进项税抵扣?
  • 烟草企业发生的广告和宣传费在当年营业收入15
  • 上海地方教育费附加减半征收2018
  • 个税手续费返还奖励财务人员的文件
  • w11如何激活
  • 怎么设置静音iphone
  • 文件的类型可以通过什么来区分
  • 一般纳税人是什么发票
  • 2023个人出租房屋房产税
  • 系统属性的表现
  • php curd
  • 企业实际缴纳税款额账务怎么看
  • 行政事业单位怎么考
  • web转义字符
  • 实行核定征收印花税的纳税期限为一个月税额较小的
  • 消费者取得哪种权利
  • 安装windows(install windows)
  • 分支机构可以不分配所得税吗?
  • php常用方法
  • php自动部署
  • 权益法下股权投资转让
  • 税控盘没有报税处理这个选项
  • pandas常见操作
  • python locator
  • php 缓存
  • 报销有专票和普票,怎么出分录
  • 公司广告费用咨询费都应当作为管理费用对还是错
  • 现代服务包括哪些内容是什么
  • 总公司和分公司按什么分类
  • 所得税费用影响企业营业利润吗
  • 单位银行提取大额现金最多能取多少
  • 期末进行存货清查
  • 电子承兑汇票接收流程
  • 增值税专用设备是什么
  • 员工借款还款怎么做账
  • 公司社保外包了,没给我社保卡怎么办?
  • 开具电费发票如何入账?
  • 不能抵扣的普通发票如何做分录
  • 出口转内销怎么做
  • 交车辆购置税需要什么材料
  • 代金券消费怎么入账
  • 跨境汇款汇错
  • Internet Explorer 8(IE8)简体中文版de 卸载
  • 卸载微信后重新登录微信怎么恢复之前的数据
  • redhat图形化界面启动
  • openbabel安装
  • Solaris 10.0 cvs的安装方法
  • 免费升win10时升级后一直有效吗
  • win7系统点击桌面图标没反应
  • 安全账户管理器或本地安全机构服务器
  • shine.exe - shine是什么进程 有什么用
  • 命令行批量重命名
  • win10的qq
  • 安装samba服务器步骤
  • Win7摄像头驱动程序
  • 防止shell脚本重复执行
  • 关于python中的判断条件
  • jq设置下拉框的值
  • 宁波市税务网上营业厅
  • 消费税征税环节
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设