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

根据 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会居中在整个预览窗口。

时间: 2024-08-04 13:42:09

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

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

创建一个新的Scene,并按 Unity插件之NGUI学习(2)创建UI Root,并在UI Root的Camera下创建一个Panel. 然后在选中Panel,在菜单中选择NGUI->Create->Unity 2D Sprite 查看Inspector窗口 接着是在Unity中制作Sprite: 在Project窗口创建Textures文件夹,并从外部拖入一些图片素材,然后选中需要转成Sprite的图片,然后在Inspector窗口进行转变Sprite的操作,如图. 选择Sprite(2D

Unity插件之NGUI学习(9)—— Tween和世界坐标系尺寸转换为NGUI尺寸

在游戏中,有一种比较常见的动画效果,就是产生得分后,分数会在游戏中显示,并快速移动到总分的位置并使之相加.今天我就打算使用NGUI的Tween来制作这种分数动画效果. 根据 Unity插件之NGUI学习(2),创建一个UI Root,然后使用NGUI创建一个Label和一个Button. 在Project窗口中,在Resources/Prefabs文件夹中创建一个Prefab,该Prefab就是一个NGUI的Label,然后在菜单中选择NGUI->Tween->Rotation和NGUI-&g

Unity插件之NGUI学习(7)—— ScrollView(Panel)

今天介绍的ScrollView,參考的是NGUI(3.6.8)中的Example项目:Scroll View(Panel). 先依照Unity插件之NGUI学习(2)创建一个UI Root.然后在UI Root以下创建一个Scroll View,选择菜单NGUI->Create->Scroll View 然后在Inspector窗体做一些參数设置 Movement设置滚动Vertical纵向或者horizontal横向. Scroll Bars能够加入纵向或者横向的滚动栏控件(在这个项目中暂且

【学习中】Unity插件之NGUI 完整视频教程

课程 章节 内容 签到 Unity插件之NGUI 完整视频教程 第一章 NGUI基础控件和基础功能学习 1.NGUI介绍和插件的导入 6月29日 2.创建UIRoot 6月29日 3.学习Label控件,显示文字 6月29日 4.学习Sprite创建精灵,显示图片 5.学习Panel面板,控件容器 6.创建Button按钮,使用脚本监听按下 7.创建图集Atlas 8.切图SlicedSprite九宫切图 9.dynamicFont动态字体制作和显示 10.widget属性,pivot,dept

Unity插件之NGUI学习(5)—— 创建Label图文混排及文字点击

创建一个新的Scene,并按 Unity插件之NGUI学习(2)创建UI Root. 准备工作,制作Font,现在Project窗口创建一个Font文件夹,然后从系统自带字体文件夹中选择自己需要的字体,我选择了黑体,然后拖到Font文件夹中去.选择刚导入的字体. Font Size默认是16,不过网上看到过size16在IOS上显示太小,所以设置为30. 在菜单中选择NGUI->Open->Font Maker Type默认是Generated Bitmap--会生成材质文件,Dynamic-

NGUI使用教程(1) 安装NGUI插件

前言 鉴于当前游戏开发的大势,Unity3d的发展势头超乎我的预期,作为一个Flash开发人员,也是为Flash在游戏开发尤其是手游开发中的地位感到担忧....所以 近期一段时间都在自己学习unity3d,技术仅仅有不断学习才干跟上迅猛的计算机潮流,所以博主写这篇文章即是自己学习的笔记又是把自己的心得作为一个分享...写的不好之处,还请大家体谅而且给予指正. 闲言少叙,书归正传,我的使用的是unity4.2,大家能够去官网下载最新版本号的http://unity3d.com/unity/down

NGUI 学习笔记实战——制作商城

Unity3D的uGUI听说最近4.6即将推出,但是目前NGUI等UI插件大行其道并且已经非常成熟,所以我们还是先看眼前吧. 一.实现思想 商城的功能是很多游戏都拥有的,按下一个界面按钮,弹出一个窗体. 然后是商城中的商品可以拖动,既可以用手,也可以用滑条等等,至于点击购买就不单单是UI层的事了.等到实现NDate的时候再进行讨论. 二.实现背景 1.NGUI->Open->Prefab tool bar ,拖一个black widget进去 2.之后布局如下,这些应该没什么难度,弄好锚点,d

【VR】Leap Motion 官网文档 Unity插件概述

前言: Leap Motion的官网文档已经有不少的热心网友参与了翻译,但没有覆盖官网文档的全部. 为迎合Unity VR的热潮与大家的学习需要,本博客将推出针对Unity方向的官方文档翻译系列. 本篇主要对Leap Motion的Unity插件及坐标系系统进行简述. 英文原文网址:https://developer.leapmotion.com/documentation/unity/unity/Unity_Overview.html 译文首发&持续更新:http://blog.csdn.ne

NGUI学习笔记汇总

欢迎来到unity学习.unity培训.unity企业培训教育专区,这里有很多U3D资源.U3D培训视频.U3D教程.U3D常见问题.U3D项目源码,[狗刨学习网]unity极致学院,致力于打造业内unity3d培训.学习第一品牌. NGUI学习笔记 一.NGUI的直接用法 1. Attach a Collider:表示为NGUI的某些物体添加碰撞器,如果界面是用NGUI做的,只能这样添加.(注:用Component添加无效). 2. Attach an Anchor:表示为该物体添加了UIAn