Unity表格绘制

Unity表格绘制之参考修订

首先在这里先感谢下yongh701我是看他的文章才学会绘制表格的,其博客地址为https://blog.csdn.net/yongh701/article/details/70858083。欢迎大家去学习,为啥要重新写一个呢,主要是在参考其内容进行绘制的时候遇到一些问题,自己做了些修改更适合自己吧。
完成如下的表格,说明如何利用原生的UGUI完成表格:

Unity表格绘制_第1张图片

一、场景布置

1、新建一个带滚动的Plane。如图所。设置Panel的大小为根据情况定义,你也可以设置为其它大小,但下文部分大小设置也做出相应的调整。
Unity表格绘制_第2张图片

2、之后在Plane下创建一个空物体,命名为Table,如上图所示,将Panel的Scoll Rect组件中的内容设置为这个Table。同时加上Layout->Vertical Layout Group这个垂直布局的插件,Spacing设置为10,以后在Table下的子物体会一个一个地自动往下摆放的。同时加上Layout->Content Size Fitter自适应内容调节大小这个组件。
Unity表格绘制_第3张图片
Unity表格绘制_第4张图片这个垂直适应参数要设置否则不会随着表格的变化自动调整滚动条的值。

3、然后我们在这个Table中再摆一个空物体,命名为1,作为表头,赋予Layout->Grid Layout Group网格布局。这里的Cell Size根据Panel是大小设置,我们就赋予一个X=150,Y=30的大小一个网格,间隔Spacing X Y都为0。

Unity表格绘制_第5张图片

之后在这个空物体1,下面创建4个Text,分别命名为Cell-Cell3,由于老爸空物体1有Grid Layout Group的存在,这些Text儿子会自动一个一个地形成网格。将字体弄成20号,分别改上上图的中文形成表格。新建一个预设,命名为Row,将空物体1赋予这个预设。

Unity表格绘制_第6张图片
上图中是在实际制作的过程中调整了宽度后需要保持一致的地方,也是设置表格间距的地方

二、脚本编写

在于Main Camera同级的游戏场景最顶处,创建一个空物体GameObject赋予脚本TableCreate.cs如下:

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class TableCreate : MonoBehaviour
{

public GameObject Row_Prefab;//表头预设

void Start()
{
    for (int i = 0; i < 100 i++)//添加并修改预设的过程,将创建10行
    {GameObject table = GameObject.Find("Canvas(成绩)/Panel/table");
        GameObject row = GameObject.Instantiate(Row_Prefab, table.transform.position, table.transform.rotation) as GameObject;
        row.name = "row" + (i + 1);
        row.transform.SetParent(table.transform);
        row.transform.localScale = Vector3.one;//设置缩放比例1,1,1,不然默认的比例非常大
        //设置预设实例中的各个子物体的文本内容
        basc.FindChildGameObject(row.gameObject, "cell").GetComponent().text = (i + 1) + "";
        //row.transform.FindChild("cell").GetComponent().text = (i + 1) + "";
        basc.FindChildGameObject(row.gameObject, "cell1").GetComponent().text = "name" + (i + 1);
        basc.FindChildGameObject(row.gameObject, "cell2").GetComponent().text = "class" + (i + 1);
        basc.FindChildGameObject(row.gameObject, "cell3").GetComponent().text = "da" + (i + 1);
        
    }
}

}
并且在GameObject中指明这个Row_Prefab就是预设Row。

Unity表格绘制_第7张图片
这样就大功告成。

由于Table已经设置了垂直布局+自动根据内容设置大小,Panel也设置了滚动,因此可以不停往里面加预设Row,他们就会工工整整地排列起来,形成表格。唯一注意的是,需要在生成脚本TableCreate.cs固定生成的预设实例都挂在Tabel之下,同时缩放Scale必须为1,不然默认地生成会漫无边际的。需要在脚本设置预设实例,必须对于GameObject.Instantiate()的返回值从Object变成GameObject则可以操作了,否则会出现Setting the parent of a transform which resides in a prefab is disabled to prevent data corruption的报错。同时应该用setParent方法,设置预设实例的父物体,而不是.transform.parent=xx,否则生成一个,出一次警告。
Unity表格绘制_第8张图片 Unity表格绘制_第9张图片
在制作预制体的时候要从1开始不要从table开始会引间距异常的情况

你可能感兴趣的:(unity)