Unity UI实现表格渲染

前言

最近有在用Unity做前端UI, 用到了实现表格数据渲染,也就是后台给的list渲染到表格中,查看了许多资料发现比较少,因此在这里记录一下吧,希望可以帮助到大家哦。

也是第一次使用Unity,先简单介绍一下,Unity是一款经常用来做3d图像的框架,很多游戏都有用到Unity,比如小编最近在玩的“爸爸的面馆”就是有用到这个框架,以后如果有尝试3D的demo再分享给大家吧。

正文

小编尝试了两种方式,但是实际来说,第二种方式更好一些。

方案1:使用scrollview控件结合string形式的数据展示

  • 创建项目
  • 创建UI-scrollview
  • 在scrollview中的content中添加text控件
  • 创建script脚本,将脚本放到scrollview的inspector下,直接拖动过去就好
  • 拖动过去之后,将刚才添加的text控件绑定到scrollview的inspector的script下的text上

代码如下:

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

public class NewBehaviourScript1 : MonoBehaviour
{
	//content下的text控件名称
     public Text tableText;
     //定义要放到表格中的数据
     private string[,] tableData;
  
    // Start is called before the first frame update
    void Start()
    {
          tableData=new string[,]{
          {"intamnet     ","Connected","wifi"},
     	  {"ChenL        ","","wifi"},
     	  {"tatatnet      ","","wifi"},
          {"internet","","wifi"},
          {"ChenL","","wifi"},
          {"internet","","wifi"},
          {"ChenL","","wifi"},
          {"hidtwor","","wifi"},
          {"internet     ","","wifi"},
          {"ChenL        ","","wifi"},
          {"internet     ","","wifi"},
          {"Ch4nL        ","","wifi"},
          {"internet     ","","wifi"},
     	  {"Ch6nL        ","","wifi"}
       };
       UpdatDataText();
    }
    
    void UpdatDataText(){
    	RectTransform contentTransform =GetComponentInChildren<ScrollRect>().content;
    	string dataStr="";
    	for(int i =0;i<tableData.GetLength(0);i++){
    		for(int j =0;j<tableData.GetLength(1);j++){
    			dataStr+=tableData[i,j].PadRight(20);
    		}
    		dataStr+="\n";
    	}
    	tableText.text=dataStr;
    	
    	//当数据超过scrollview的size时可以滑动滚轮显示数据
    	contentTransform.sizeDelta=new Vector2(tableText.preferredWidth,tableText.preferredHeight);
    	tableText.text=dataStr;
    	 
    	
   }
}

这个方案的显示效果:
在这里插入图片描述
这个方案算是就字符串模拟表格的结果,但是有些问题就是每一列的数据如果字符串长度不是一般长,导致数据就不会整齐,因此有了方案2.

方案2:使用scrollview结合grid layout group控件调整布局展示表格数据。

  • 创建GameObject
  • GameObject下创建panel
  • panel下创建一个scrollview
  • scrollview下的content下创建一个gameObject命名为CellPrefab
  • CellPrefab下创建想要的列,我创建了3列,第一列text,第二列text,第三列image
  • CellPrefab下,add component-grid layout group
  • 将CellPrefab拖到Assets下,这样CellPrefab就变成了一个预制体
  • 通过代码实现,将数据放到预制体,构成表格

代码如下:

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

public class table1 : MonoBehaviour
{
    public GameObject CellPrefab;
    public Sprite[] icons;

    private List<List<string>> tableData = new List<List<string>>()
    {
       
        new List<string>{"Item 1", "10", "icon1"},
        new List<string>{"Item 2", "20", "icon2"},
        new List<string>{"Item 3", "30", "icon3"},
        new List<string>{"Item 4", "40", "icon4"},
        new List<string>{"Item 5", "50", "icon5"},
        new List<string>{"Item 6", "60", "icon6"},
        new List<string>{"Item 7", "70", "icon7"},
        new List<string>{"Item 8", "80", "icon8"},
    };

    void Start()
    {
        icons = Resources.LoadAll<Sprite>("Icons");
        if (icons == null || icons.Length == 0)
        {
            Debug.LogError("No icons loaded!");
        }
        else
        {
            Debug.Log("Number of icons loaded: " + icons.Length);
        }
        Debug.Log("icons__________"+icons);
        PopulateTable();
    }

    void PopulateTable()
    {
      

        GridLayoutGroup gridLayout = GetComponentInChildren<GridLayoutGroup>();
        foreach (var row in tableData)
        {
            GameObject cell = Instantiate(CellPrefab);
            Text[] cellTexts = cell.GetComponentsInChildren<Text>();

            for (int i = 0; i < 3; i++)
            {
                if (i == 2)
                {
                   Image iconImage = cell.GetComponentInChildren<Image>();
                    //int iconIndex = int.Parse(row[i].Substring(4));


                    //if (iconIndex < 0 || iconIndex >= icons.Length)
                    // {
                    //   Debug.LogError("Icon index out of bounds!");
                    //  return;
                    // }
                   // Debug.Log("iconIndex==="+iconIndex);
                    iconImage.sprite = icons[2];
                }
                else
                {
                    cellTexts[i].text = row[i];
                }
            }
            // Set the new cell as a child of the GridLayoutGroup
            cell.transform.SetParent(gridLayout.transform, false);
        }
    }
}

方案2效果如图:
在这里插入图片描述
可以看到比较整齐了,这个添加了一个按钮,为点击每一行的数据跳转做准备。

后记

因为第一次使用Unity,而且是在linux下,使用起来不是很熟,每一个控件,还有表格的数据渲染,图标的显示,每一步都不太顺畅,只能说多多积累经验吧,新学习了一个框架也是不错的体验。后续有新的功能使用会再做分享~()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/426036.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

类构造完成,Bean注入之后执行方法

PostConstruct 容器执行之后执行 PreDestory 在容器销毁之前执行

redis进阶(一)

文章目录 前言一、Redis中的对象的结构体如下&#xff1a;二、压缩链表三、跳跃表 前言 Redis是一种key/value型数据库&#xff0c;其中&#xff0c;每个key和value都是使用对象表示的。 一、Redis中的对象的结构体如下&#xff1a; /** Redis 对象*/ typedef struct redisO…

今日arXiv最热大模型论文:谷歌最新研究,将LLM用于回归分析任务,显著超越传统模型

回归分析是一个强大的工具&#xff0c;能够准确预测系统或模型的结果指标&#xff0c;给定一组参数。然而&#xff0c;传统上这些方法仅适用于特定任务。本文研究者提出了OMNIPRED框架&#xff0c;这是一个训练语言模型作为通用端到端回归器的框架&#xff0c;它可以处理来自多…

SNAP:如何批量预处理Sentinel2 L2A数据集并输出为TIFF文件?

我的需求 我目前就是希望下载哨兵2号数据&#xff0c;然后在SNAP中进行批量提取真彩色波段并输出为TIFF文件。 数据集下载说明 目前哨兵网站似乎进行了一大波更新&#xff0c;连网站都换了&#xff0c;网址如下&#xff1a; https://dataspace.copernicus.eu/ 打开后界面如…

五千字 DDL、DML、DQL、DCL 超详解

SQL语句&#xff0c;根据其功能&#xff0c;主要分为四类&#xff1a;DDL、DML、DQL、DCL。 DDL (Data Definition Language) 数据定义语言&#xff0c;用来定义数据库对象(数据库&#xff0c;表&#xff0c; 字段) DML (Data Manipulation Languag) 数据操作语言&#xff0c;…

想从事数据方向职场小白看过来, 数据方面的一些英文解释

想从事数据方向职场小白看过来&#xff0c;一些英文名词解释 文章目录 想从事数据方向职场小白看过来&#xff0c;一些英文名词解释 英文类解释NoSQL&#xff1a;ESB&#xff1a;ACID &#xff1a;Data Vault&#xff1a;MDM&#xff1a;OLAP&#xff1a;SCD:SBA&#xff1a;MP…

从嵌入式Linux到嵌入式Android

最近开始投入Android的怀抱。说来惭愧&#xff0c;08年就听说这东西&#xff0c;当时也有同事投入去看&#xff0c;因为恶心Java&#xff0c;始终对这玩意无感&#xff0c;没想到现在不会这个嵌入式都快要没法搞了。为了不中年失业&#xff0c;所以只能回过头又来学。 首先还是…

Python算法100例-2.11 换分币

完整源代码项目地址&#xff0c;关注博主私信源代码后可获取 1.问题描述2.问题分析3.算法设计4.确定程序框架5.完整的程序6.运行结果 1&#xff0e;问题描述 将5元的人民币兑换成1元、5角和1角的硬币&#xff0c;共有多少种不同的兑换方法。 2&#xff0e;问题分析 根据该…

【框架】Spring 框架重点解析

Spring 框架重点解析 1. Spring 框架中的单例 bean 是线程安全的吗&#xff1f; 不是线程安全的 Spring 框架中有一个 Scope 注解&#xff0c;默认的值是 singleton&#xff0c;即单例的&#xff1b;因为一般在 Spring 的 bean 对象都是无状态的&#xff08;在生命周期中不被…

嵌入式Qt 对话框及其类型 QDialog

一.对话框的概念 对话框是与用户进行简短交互的顶层窗口。 QDialog是Qt中所有对话框窗口的基类。 QDialog继承与QWidfet是一种容器类型的组件。 QDialog的意义&#xff1a; QDialog作为一种专业的交互窗口而存在。 QDialog不能作为子部部件嵌入其他容器中。 QDialog是定制…

【算法集训】基础算法:枚举

一、基本理解 枚举的概念就是把满足题目条件的所有情况都列举出来&#xff0c;然后一一判定&#xff0c;找到最优解的过程。 枚举虽然看起来麻烦&#xff0c;但是有时效率上比排序高&#xff0c;也是一个不错的方法、 二、最值问题 1、两个数的最值问题 两个数的最小值&…

力扣刷题:226.反转二叉树

题目&#xff1a; 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1]示例 2&#xff1a; 输入&#xff1a;root [2,1,3] 输出&#xff1a;[2…

业务真的需要微服务吗

业务真的需要微服务吗 要说过去十年最火热的软件体系是什么&#xff0c;个人认为莫过于“微服务架构“了。从一线互联网架构师&#xff0c;到刚接触计算机软件不久的学生几乎都或多或少的了解过”微服务“相关知识了&#xff0c;其中在最出名的微服务体系要数 spring cloud 了…

CentOS安装Docker(黑马学习笔记)

Docker 分为 CE 和 EE 两大版本。CE 即社区版&#xff08;免费&#xff0c;支持周期 7 个月&#xff09;&#xff0c;EE 即企业版&#xff0c;强调安全&#xff0c;付费使用&#xff0c;支持周期 24 个月。 Docker CE 分为 stable test 和 nightly 三个更新频道。 官方网站上…

作用域、解构、箭头函数

作用域 局部作用域 函数作用域(一直 存在) 块作用域(ES6,只有let和const有块级作用域&#xff0c;var没有) 块就是一对大括号&#xff0c;比如{ }、if(){ }、for(…){ } 使用var则失去块级作用域 //例如 for(var i1;i<3;i) {console.log(i)} console.log(i);//正确&…

Semantic human matting

1.introduction 数据集包括&#xff0c;时尚模特数据集&#xff0c;超过18.8w张模特图&#xff0c;从中选出35311张图片&#xff0c;DIM数据集&#xff0c;仅包含人类的图像&#xff0c;202个前景图像&#xff0c;背景来自coco数据集和互联网&#xff0c;背景图不含人类&#x…

SpringBoot整合MyBatis实现增删改查

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 循序渐进学SpringBoot ✨特色专栏: MySQL学习 🥭本文内容: SpringBoot整合MyBatis实现增删改查 📚个人知识库: Leo知识库,欢迎大家访…

【问题解决】| 关于torch无法使用GPU的一些实验探索,思考

文章目录 1 研究背景2 问题解决2.1 问题一&#xff0c;这两个版本分别是怎么得到的&#xff1f;2.2 问题二&#xff0c;Windows下安装CUDA Tookit 是必须的吗&#xff1f;2.3 问题三&#xff0c;驱动版本必须大于等于运行时版本吗&#xff1f;2.4 问题四&#xff0c;只运行pip …

【大厂AI课学习笔记NO.56】(9)模型评测

作者简介&#xff1a;giszz&#xff0c;腾讯云人工智能从业者TCA认证&#xff0c;信息系统项目管理师。 博客地址&#xff1a;https://giszz.blog.csdn.net 声明&#xff1a;本学习笔记来自腾讯云人工智能课程&#xff0c;叠加作者查阅的背景资料、延伸阅读信息&#xff0c;及学…

微信小程序证书评级导致接口无法访问问题

微信小程序的ssl证书到期后&#xff0c; 更换了免费的ssl证书&#xff0c; 是在freessl网站申请的&#xff0c; 配置完了&#xff0c;后台可以访问https网页&#xff0c;但是小程序还是无法访问&#xff0c; 开始没有怀疑是https证书的问题&#xff0c; 调适了好长时间的代码&a…
最新文章