依据 Unity插件之NGUI学习(2),创建一个UI Root,在UI Root下创建一个Texture作为背景图,并设置图片,在Wiget下调整大小;然后在UI Root下再创建一个Panel。

在Hierarchy窗体选中Panel,然后选择菜单Component->NGUI->Interaction->Table,查看Inspector窗体,在Panel的属性中添加了UITable。

Columns 表示每行有几个元素

Direction 表示超过每列的元素后加入元素的方向

Sorting 元素排序的方式

Hide Inactive 默认勾选,全部看不到的子节点在排列时被忽略

Padding x,y方向的间隔,这里的值是基于NGUI的

创建一个Level的Prefab,在Hierarchy窗体下,加入多个Level,然后选中Panel,在Inspector中,用鼠标右击UITable,并运行Execute,就能够在预览窗体看到排列好的Table界面了。

由于Panel在Inspector窗体的坐标是能够调整的,可是它的大小也是基于NGUI的,为了能使整个Tabel界面居中放置,我必须计算其大小,然后将调整整个Panel的位置。

这里遇到一个问题,Level是用UISprite创建的,所以获得的高度和宽度也是基于NGUI的,并不是是基于世界坐标系的,UITable的Padding也相同是。

问题的关键在于,全部的NGUI控件都是基于UIWidget的,所以从源代码入手,会发现:

public override Vector3[] worldCorners
{
get
{
Vector2 offset = pivotOffset;

float x0 = -offset.x * mWidth;
float y0 = -offset.y * mHeight;
float x1 = x0 + mWidth;
float y1 = y0 + mHeight;

Transform wt = cachedTransform;

mCorners[0] = wt.TransformPoint(x0, y0, 0f);
mCorners[1] = wt.TransformPoint(x0, y1, 0f);
mCorners[2] = wt.TransformPoint(x1, y1, 0f);
mCorners[3] = wt.TransformPoint(x1, y0, 0f);

return mCorners;
}
}

其坐标和尺寸都是通过Transform.TransformPoint()方法转换的——变换位置从自身坐标到世界坐标。好了,以下就是我创建的TableTest 脚本,是挂在Panel上面的。

using UnityEngine;
using System.Collections;

public class TableTest : MonoBehaviour {

private UISprite level;
private UITable table;
private float tableWidth, tableHeight;

// Use this for initialization
void Start () {
table = GetComponent<UITable>();
level = GetComponentInChildren<UISprite>();
int columns = table.columns;

// 计算Table的row
int count = transform.childCount;
int rows = count % columns == 0 ? count / columns : count / columns + 1;

// 计算Table的宽度和高度,基于NGUI也就是自身原本的尺寸
tableWidth = columns * (level.width + 2 * table.padding.x);
tableHeight = rows * (level.height + 2 * table.padding.y);
Debug.Log("level width=" + level.width + ", height=" + level.height);
Debug.Log("table width=" + tableWidth + ", height=" + tableHeight);

// 将Table的宽度高度转换到世界坐标系的偏移
Vector3 delta = transform.TransformPoint(new Vector3(-tableWidth / 2, tableHeight / 2, 0));
transform.Translate(delta);
}

// Update is called once per frame
void Update () {

}

}

这样再执行游戏的话,就能看到整个Table会居中在整个预览窗体。

Unity插件之NGUI学习(8)—— Table和NGUI尺寸转换为世界坐标系尺寸相关推荐

  1. Unity插件FogofWar详细学习笔记

    可视区域 如上图,2个可视区域分别是 Unit(box or circle) 显示|隐藏 可以看到有2部分黑幕,一个很旧的纯黑色的遮罩,只用一次ÿ

  2. Unity插件之NGUI学习(4)—— 创建UI2DSprite动画

    创建一个新的Scene.并按 Unity插件之NGUI学习(2)创建UI Root,并在UI Root的Camera下创建一个Panel. 然后在选中Panel,在菜单中选择NGUI->Crea ...

  3. Unity插件-NGUI使用教程

    Unity插件-NGUI使用教程 本文提供全流程,中文翻译. Chinar坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 NGUI 一款强大 ...

  4. NGUI从入门到实战第1章开启NGUI学习之旅

    NGUI从入门到实战第1章开启NGUI学习之旅 NGUI是Unity最重要的插件之一.使用NGUI可以高效地为游戏添加界面.本书将带领大家学习NGUI.作为NGUI学习之旅的第一站,本章会在整体上介绍 ...

  5. 【Unity插件】最多的插件合集

    一.前言 ? 最近整理了一下文章,发现我分享了很多的插件,但是如果要查找某一款插件,还需要去搜索才能找到,很不方面,就想要将写过的所有的插件分享也好,教程也好,做一个汇总,然后这篇文章还会不断的更新, ...

  6. NGUI 学习笔记实战——制作商城UI界面

    Unity3D的uGUI听说最近4.6即将推出,但是目前NGUI等UI插件大行其道并且已经非常成熟,所以我们还是先看眼前吧. 一.实现思想 商城的功能是很多游戏都拥有的,按下一个界面按钮,弹出一个窗体 ...

  7. bootstrap表格插件php,深入了解Bootstrap table表格插件(一)

    这篇文章主要为大家介绍了第一次学习Bootstrap table表格插件的笔记,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 第一次使用Bootstrap-table这个表格插件,记录一下使用过程 ...

  8. ugui 转轮_【Unity插件】FingerGestures 插件使用

    FingerGesture在项目中的作用是管理用户输入和识别手势和鼠标或手指事件.可能有些人还不是很会用,下面就给大家介绍下Unity插件FingerGesture的使用教程. fingerGestu ...

  9. Asset Store上常用的40个Unity插件汇总——进阶开发者必备Unity插件

    上篇文章着重介绍了Unity Asset Store(Unity资源商店)上一些超棒的资源与素材. unity老司机的资源推荐与常用插件汇总合集 - 简书 Unity插件资源购买小技巧 - 简书 本篇 ...

最新文章

  1. 视频编码名词参数解释——非常全面详细
  2. BeautifulSoup的高级应用 之 contents children descendants string strings stripped_strings
  3. 语音识别现状与工程师必备技能
  4. Python next 函数 - Python零基础入门教程
  5. 从市场角度看服务器虚拟化
  6. 2017.7.28 愤怒的小鸟 思考记录
  7. Linux下安装配置Jenkins
  8. MTK 驱动(47)---使用PWM配置背光如何配置,及频率计算
  9. 使用C#和ASP.NET Core的PayPal智能按钮的客户端/服务器实现
  10. 24K 内存上诞生的操作系统,是如何改变计算机世界的?
  11. lambda函数if_Lambda函数用法总结
  12. 遗传算法python
  13. 快速查看当前APP包名
  14. SSRF利用 Gopher 协议拓展攻击面
  15. macOS Big Sur 11.2.2 (20D80) 虚拟机 ISO 镜像
  16. 小米、360、盛大路由器?居然还有这么多人趋之若鹜!!!想不通!
  17. javac 与 java的区别
  18. Lemon评测机的使用
  19. 联想小新一键恢复小孔_联想小新电脑一键恢复出厂设置
  20. 工作五年以上的程序员,应该干些什么

热门文章

  1. 在线安装非GPU版的tensorflow流程
  2. Json格式的netconf转成NormalizedNode
  3. 编译原理——词法分析器
  4. Three.js中显示坐标轴、平面、球体、四方体
  5. Jquery中使用table2excel插件实现将Html的table导出为Excel(附示例代码和资源下载)
  6. Winform中实现仿XP系统的任务栏菜单效果(附代码下载)
  7. C#中在窗体应用中使用StringBuilder拼接显示网页
  8. VS开发C#窗体应用时怎样设置窗体属性
  9. EasyUI中树的基本操作
  10. MyBatisPLus3.x中代码生成器自定义数据库表字段类型转换