UGUI实现模糊查询动态生成列表功能
2017-09-19 15:43
766 查看
这篇文章主要以案例的形式讲解如何制作一个UGUI的查询列表并且实现模糊查询和动态生成列表。
需求:场景中有一些名字不同的物体要求被查找并在列表中显示物体名字。
如下图的目录结构,一个父物体下有很多个子物体要求被查询并显示在UI的列表中。
制作过程:
1.新建一个图片用来做显示列表的窗口,也就是下图中的rect的区域。
2.在rect的图片添加如下组件:
3.然后在这个下面做一个Text子物体命名为grid,这个grid就是用来给显示的列表一个自动排版功能,grid要放到rect组件Scroll Rect的Content。如下图:
4.在grid上添加组件Grid Layout Group,然后根据列表格子的宽度和高度来决定cell size的大小。
在grid加上查找脚本Searchlogic。
如下图:
5.在gird下面新建图片命名为findnamegridcontent作为生成列表的每一个具体的列表格,并且将其做成prefab放到项目中的Resources目录下。
如下图:
Searchlogic脚本上要将查找按钮拖到指定位置,详细代码内容如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class searchlogic : MonoBehaviour
{
private GameObject gridnameshow;
public Button searchbutton;
/// <summary>
/// List 里存的是场景里所有的被查找物体的名称和位置
/// </summary>
///
List<Transform> allnameslist = new List<Transform>();
string inputtext = "";
GameObject searchbg;//生成的每一行的显示物体
// Use this for initialization
void Start()
{
string gridpath = "findnamegridcontent";//生成列表的路径
gridnameshow = Resources.Load(gridpath, typeof(GameObject)) as GameObject;//加载生成的子物体
//找到场景中所有的目标物体,然后添加到list里
GameObject go = GameObject.Find("Tfather");
if (go != null)
{
//找到场景中所有的目标物体,然后添加到list里
allnameslist = new List<Transform>();
foreach (Transform child in go.transform)
{
allnameslist.Add(child);
Debug.Log(child.gameObject.name);
}
}
//初始化查找按钮
searchbutton.onClick.AddListener(Findbutton);
}
/// <summary>
/// 查找方法触发
/// </summary>
void Findbutton()
{
//Grid的长度随着生成物体个数变化
this.gameObject.GetComponent<RectTransform>().sizeDelta = new Vector2(this.gameObject.GetComponent<RectTransform>().sizeDelta.x, 0);
inputtext = GameObject.Find("searchdevice").transform.FindChild("searchtitle/InputField/Text").GetComponent<Text>().text;
// 清空grid里的所有东西
List<Transform> lst = new List<Transform>();
foreach (Transform child in transform)
{
lst.Add(child);
Debug.Log(child.gameObject.name);
}
for (int i = 0; i < lst.Count; i++)
{
Destroy(lst[i].gameObject);
}
compared();
}
/// <summary>
/// 将查找文字与库里的数据对比,然后生成列表
/// </summary>
void compared()
{
for (int i = 0; i < allnameslist.Count; i++)
{
Debug.Log("list 里有:" + allnameslist[i].name);
if (inputtext != "" && allnameslist[i].name.Contains(inputtext))
{
Debug.Log("包含" + "。。。。该字符串是:" + allnameslist[i]);
Generatenamegrids(allnameslist[i].name);//生成列表
}
else
{
Debug.Log("不包含");
}
}
}
/// <summary>
/// 生成整个gird子物体
/// </summary>
void Generatenamegrids(string thename)
{
//生成record的物体、
searchbg = Instantiate(gridnameshow, this.transform.position, Quaternion.identity)as GameObject;
searchbg.transform.SetParent(this.transform);
searchbg.transform.localScale = new Vector3(1,1,1);
searchbg.transform.FindChild("positontext").GetComponent<Text>().text = thename;
//本grid长度加60
this.gameObject.GetComponent<RectTransform>().sizeDelta = new Vector2(this.gameObject.GetComponent<RectTransform>().sizeDelta.x, this.gameObject.GetComponent<RectTransform>().sizeDelta.y + this.GetComponent<GridLayoutGroup>().cellSize.y + this.GetComponent<GridLayoutGroup>().spacing.y);
}
}
这样在输入框中输入场景中被查找物体的关键字然后进行点击按钮就可以查找到物体了。
如下图:
需求:场景中有一些名字不同的物体要求被查找并在列表中显示物体名字。
如下图的目录结构,一个父物体下有很多个子物体要求被查询并显示在UI的列表中。
制作过程:
1.新建一个图片用来做显示列表的窗口,也就是下图中的rect的区域。
2.在rect的图片添加如下组件:
3.然后在这个下面做一个Text子物体命名为grid,这个grid就是用来给显示的列表一个自动排版功能,grid要放到rect组件Scroll Rect的Content。如下图:
4.在grid上添加组件Grid Layout Group,然后根据列表格子的宽度和高度来决定cell size的大小。
在grid加上查找脚本Searchlogic。
如下图:
5.在gird下面新建图片命名为findnamegridcontent作为生成列表的每一个具体的列表格,并且将其做成prefab放到项目中的Resources目录下。
如下图:
Searchlogic脚本上要将查找按钮拖到指定位置,详细代码内容如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class searchlogic : MonoBehaviour
{
private GameObject gridnameshow;
public Button searchbutton;
/// <summary>
/// List 里存的是场景里所有的被查找物体的名称和位置
/// </summary>
///
List<Transform> allnameslist = new List<Transform>();
string inputtext = "";
GameObject searchbg;//生成的每一行的显示物体
// Use this for initialization
void Start()
{
string gridpath = "findnamegridcontent";//生成列表的路径
gridnameshow = Resources.Load(gridpath, typeof(GameObject)) as GameObject;//加载生成的子物体
//找到场景中所有的目标物体,然后添加到list里
GameObject go = GameObject.Find("Tfather");
if (go != null)
{
//找到场景中所有的目标物体,然后添加到list里
allnameslist = new List<Transform>();
foreach (Transform child in go.transform)
{
allnameslist.Add(child);
Debug.Log(child.gameObject.name);
}
}
//初始化查找按钮
searchbutton.onClick.AddListener(Findbutton);
}
/// <summary>
/// 查找方法触发
/// </summary>
void Findbutton()
{
//Grid的长度随着生成物体个数变化
this.gameObject.GetComponent<RectTransform>().sizeDelta = new Vector2(this.gameObject.GetComponent<RectTransform>().sizeDelta.x, 0);
inputtext = GameObject.Find("searchdevice").transform.FindChild("searchtitle/InputField/Text").GetComponent<Text>().text;
// 清空grid里的所有东西
List<Transform> lst = new List<Transform>();
foreach (Transform child in transform)
{
lst.Add(child);
Debug.Log(child.gameObject.name);
}
for (int i = 0; i < lst.Count; i++)
{
Destroy(lst[i].gameObject);
}
compared();
}
/// <summary>
/// 将查找文字与库里的数据对比,然后生成列表
/// </summary>
void compared()
{
for (int i = 0; i < allnameslist.Count; i++)
{
Debug.Log("list 里有:" + allnameslist[i].name);
if (inputtext != "" && allnameslist[i].name.Contains(inputtext))
{
Debug.Log("包含" + "。。。。该字符串是:" + allnameslist[i]);
Generatenamegrids(allnameslist[i].name);//生成列表
}
else
{
Debug.Log("不包含");
}
}
}
/// <summary>
/// 生成整个gird子物体
/// </summary>
void Generatenamegrids(string thename)
{
//生成record的物体、
searchbg = Instantiate(gridnameshow, this.transform.position, Quaternion.identity)as GameObject;
searchbg.transform.SetParent(this.transform);
searchbg.transform.localScale = new Vector3(1,1,1);
searchbg.transform.FindChild("positontext").GetComponent<Text>().text = thename;
//本grid长度加60
this.gameObject.GetComponent<RectTransform>().sizeDelta = new Vector2(this.gameObject.GetComponent<RectTransform>().sizeDelta.x, this.gameObject.GetComponent<RectTransform>().sizeDelta.y + this.GetComponent<GridLayoutGroup>().cellSize.y + this.GetComponent<GridLayoutGroup>().spacing.y);
}
}
这样在输入框中输入场景中被查找物体的关键字然后进行点击按钮就可以查找到物体了。
如下图:
相关文章推荐
- UGUI动态生成列表功能实现(增删保存)
- 页面动态列表,模态窗及模糊查询的实现
- MyBatis实现动态查询、模糊查询功能
- 动态生成 WebUpload 实现列表页面的上传功能
- 动态生成的chosen实现模糊查询
- asp.net实现的MVC跨数据库多表联合动态条件查询功能示例
- 动态SQL中 实现条件参数 varchar类型的参数名称 以及模糊查询实现
- mybatis分页及模糊查询功能实现
- jQuery 异步模糊查询 实现下拉搜索功能
- OPENCV2学习(1)_生成运动模糊核(OPENCV2 实现Matlab中fspecial的motion功能)
- 【Java EE 学习 77 上】【数据采集系统第九天】【通过AOP实现日志管理】【通过Spring石英调度动态生成日志表】【日志分表和查询】
- 使用全文索引技术实现高效的like模糊查询功能
- 在SQL Server2000中实现rowNumber功能:查询中生成自动增长列
- 使用jQuery实现实时模糊查询功能
- 用Criteria进行模糊查询实现简单的站内搜索功能
- Ext JS 实现建议词模糊动态搜索功能
- Ajax实现在textbox中输入内容,动态从数据库中模糊查询显示到下拉框中(ZT)
- js+插件实现代码复制及动态生成二维码扫描、分享到朋友圈QQ空间功能
- Select下拉框模糊查询功能实现代码
- 用.Net的动态代码生成功能实现AOP