Unity表格绘制

这篇博客介绍了如何使用Unity的原生UGUI组件绘制表格,包括场景布置和脚本编写两部分。在场景布置中,通过创建带有滚动功能的Plane,设置Vertical Layout Group和Content Size Fitter实现表格的自动布局。在脚本编写部分,创建TableCreate.cs脚本,利用Prefab动态生成表格行,并注意缩放和父物体设置,以避免错误和警告。

Unity表格绘制之参考修订

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

在这里插入图片描述

一、场景布置

1、新建一个带滚动的Plane。如图所。设置Panel的大小为根据情况定义,你也可以设置为其它大小,但下文部分大小设置也做出相应的调整。
在这里插入图片描述

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

3、然后我们在这个

Unity 中实现网格绘制功能可以通过多种方式完成,具体取决于使用场景(例如是 2D 还是 3D 环境,是否需要动态更新网格等)。以下介绍几种常见的实现方法,并结合引用内容进行说明。 ### 使用代码动态生成网格点 可以通过创建一个 `GridPos` 类来生成网格的顶点坐标。此类可以根据给定的宽度、高度以及单元格大小来生成网格点。以下是一个简化版本的实现: ```csharp public class GridPos { private int width; private int height; private float cellSize; private Vector3 offset; public GridPos(int width, int height, float cellSize, Vector3 offset) { this.width = width; this.height = height; this.cellSize = cellSize; this.offset = offset; } public List<Vector3[]> GetAllPoint() { List<Vector3[]> points = new List<Vector3[]>(); for (int y = 0; y < height; y++) { Vector3[] row = new Vector3[width]; for (int x = 0; x < width; x++) { row[x] = new Vector3(x * cellSize, 0, y * cellSize) + offset; } points.Add(row); } return points; } } ``` 在实际使用时,可以通过如下方式创建网格并获取所有点: ```csharp GridPos gp1 = new GridPos((int)width, (int)height, 1, new Vector3(0.5f, 0.5f, 0) + offposition); List<Vector3[]> m_linePoints_point = gp1.GetAllPoint(); // 这是要绘画出来的点 [^1] ``` ### 使用 UGUI 绘制表格 若希望在 UI 层面绘制表格,可以使用 Unity 的 UGUI 系统。首先创建一个 `GridLayoutGroup` 并将其附加到一个 `GameObject` 上,然后动态生成单元格。以下是一个简单的示例代码: ```csharp public class TableGenerator : MonoBehaviour { public GameObject cellPrefab; // 单元格的预制体 public Transform tableParent; // 表格的父对象 public void GenerateTable(int rows, int columns) { for (int i = 0; i < rows; i++) { for (int j = 0; j < columns; j++) { GameObject cell = Instantiate(cellPrefab, tableParent); // 可以在这里设置单元格的内容 } } } } ``` 通过调整 `cellPrefab` 的布局和样式,可以实现复杂的表格效果。这种方法适用于需要动态生成表格内容的场景[^2]。 ### 使用 LineRenderer 绘制网格线 如果希望在 3D 场景中绘制网格线,可以使用 `LineRenderer` 组件。通过动态生成水平和垂直的线条来表示网格。以下是一个简单的示例代码: ```csharp public class GridLineRenderer : MonoBehaviour { public int width = 10; public int height = 10; public float cellSize = 1.0f; private LineRenderer lineRenderer; void Start() { lineRenderer = gameObject.AddComponent<LineRenderer>(); lineRenderer.material = new Material(Shader.Find("Standard")); lineRenderer.startColor = Color.black; lineRenderer.endColor = Color.black; lineRenderer.startWidth = 0.05f; lineRenderer.endWidth = 0.05f; lineRenderer.positionCount = (width + 1) * 2 + (height + 1) * 2; int index = 0; // 绘制垂直线 for (int x = 0; x <= width; x++) { lineRenderer.SetPosition(index++, new Vector3(x * cellSize, 0, 0)); lineRenderer.SetPosition(index++, new Vector3(x * cellSize, 0, height * cellSize)); } // 绘制水平线 for (int z = 0; z <= height; z++) { lineRenderer.SetPosition(index++, new Vector3(0, 0, z * cellSize)); lineRenderer.SetPosition(index++, new Vector3(width * cellSize, 0, z * cellSize)); } } } ``` 这种方法适用于需要在 3D 场景中可视化网格的情况,且可以通过调整 `LineRenderer` 的属性来改变线条的外观。 ### 总结 以上三种方法分别适用于不同的场景:动态生成网格点适用于需要处理网格数据的逻辑;使用 UGUI 绘制表格适用于 UI 层面的表格展示;使用 `LineRenderer` 绘制网格线适用于 3D 场景中的网格可视化。根据具体需求选择合适的方法进行实现。
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值