开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:2233

当前位置:游戏蛮牛 技术专区 开发者专栏

__________________________________________________________________________________
开发者干货区版块规则:

  1、文章必须是图文形式。(至少2幅图)
      2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
      3、本版块只支持在游戏蛮牛原创首发,不支持转载。
      4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
      5、......
__________________________________________________________________________________
查看: 3679|回复: 36

[alayeshi] UGUI实现模糊查询功能

[复制链接]  [移动端链接]
排名
2598
昨日变化
1

71

主题

310

帖子

1481

积分

Rank: 9Rank: 9Rank: 9

UID
54986
好友
11
蛮牛币
2096
威望
0
注册时间
2014-11-12
在线时间
434 小时
最后登录
2018-6-19

专栏作家

发表于 2017-9-21 10:28:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x

这篇文章主要以案例的形式讲解如何制作一个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脚本上要将查找按钮拖到指定位置,详细代码内容如下:


[C#] 纯文本查看 复制代码
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);  
    }  
  
    
  
}  


这样在输入框中输入场景中被查找物体的关键字然后进行点击按钮就可以查找到物体了。

如下图:





本帖被以下淘专辑推荐:


回复

使用道具 举报

3偶尔光临
210/300
排名
13517
昨日变化

0

主题

67

帖子

210

积分

Rank: 3Rank: 3Rank: 3

UID
210488
好友
0
蛮牛币
224
威望
0
注册时间
2017-3-7
在线时间
89 小时
最后登录
2018-6-6
发表于 2017-9-21 14:13:56 | 显示全部楼层
666666666666666

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1233/1500
排名
1910
昨日变化
1

1

主题

297

帖子

1233

积分

Rank: 6Rank: 6Rank: 6

UID
206337
好友
2
蛮牛币
5009
威望
0
注册时间
2017-6-5
在线时间
299 小时
最后登录
2018-6-19
发表于 2017-9-21 14:50:04 | 显示全部楼层
谢谢分享

回复

使用道具 举报

7日久生情
2075/5000
排名
1387
昨日变化

13

主题

414

帖子

2075

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
148830
好友
4
蛮牛币
4149
威望
0
注册时间
2016-5-17
在线时间
836 小时
最后登录
2018-6-19
发表于 2017-9-21 15:44:15 | 显示全部楼层

我一个人走走停停冷暖自知自始自终自给
回复

使用道具 举报

5熟悉之中
898/1000
排名
2148
昨日变化

2

主题

99

帖子

898

积分

Rank: 5Rank: 5

UID
158341
好友
0
蛮牛币
1783
威望
0
注册时间
2016-7-28
在线时间
219 小时
最后登录
2018-5-24
发表于 2017-9-21 19:06:55 | 显示全部楼层
感谢楼主的教程,已经收藏

回复 支持 反对

使用道具 举报

5熟悉之中
799/1000
排名
3292
昨日变化
1

8

主题

157

帖子

799

积分

Rank: 5Rank: 5

UID
162410
好友
0
蛮牛币
2308
威望
0
注册时间
2016-8-15
在线时间
236 小时
最后登录
2018-6-19
发表于 2017-9-22 08:13:26 | 显示全部楼层
谢谢  谢谢

回复 支持 反对

使用道具 举报

5熟悉之中
957/1000
排名
2504
昨日变化

1

主题

116

帖子

957

积分

Rank: 5Rank: 5

UID
183756
好友
0
蛮牛币
725
威望
0
注册时间
2016-11-22
在线时间
331 小时
最后登录
2018-6-8
发表于 2017-9-22 08:51:43 | 显示全部楼层
可以的,这个不错

回复

使用道具 举报

7日久生情
4371/5000
排名
38
昨日变化
1

2

主题

480

帖子

4371

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
3490
好友
4
蛮牛币
1398
威望
0
注册时间
2013-9-9
在线时间
1151 小时
最后登录
2018-6-14

VIP

发表于 2017-9-22 08:54:21 | 显示全部楼层
6666666666666666666666

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1442/1500
排名
1836
昨日变化

3

主题

347

帖子

1442

积分

Rank: 6Rank: 6Rank: 6

UID
159631
好友
1
蛮牛币
3249
威望
0
注册时间
2016-7-30
在线时间
434 小时
最后登录
2018-6-19
发表于 2017-9-22 09:02:09 | 显示全部楼层
谢谢分享

回复

使用道具 举报

6蛮牛粉丝
1138/1500
排名
3382
昨日变化

0

主题

527

帖子

1138

积分

Rank: 6Rank: 6Rank: 6

UID
156480
好友
0
蛮牛币
1849
威望
0
注册时间
2016-7-12
在线时间
225 小时
最后登录
2018-3-16
发表于 2017-9-22 09:36:21 | 显示全部楼层
66666666666666

回复

使用道具 举报

5熟悉之中
648/1000
排名
3279
昨日变化
1

1

主题

76

帖子

648

积分

Rank: 5Rank: 5

UID
194214
好友
0
蛮牛币
1870
威望
0
注册时间
2016-12-19
在线时间
173 小时
最后登录
2018-6-7
发表于 2017-9-22 10:13:58 | 显示全部楼层
66666666666666

回复

使用道具 举报

6蛮牛粉丝
1310/1500
排名
1991
昨日变化
1

1

主题

146

帖子

1310

积分

Rank: 6Rank: 6Rank: 6

UID
180106
好友
1
蛮牛币
2194
威望
0
注册时间
2016-11-2
在线时间
545 小时
最后登录
2018-6-19
QQ
发表于 2017-9-22 10:14:11 | 显示全部楼层
学学学习

回复

使用道具 举报

5熟悉之中
568/1000
排名
3937
昨日变化
2

1

主题

62

帖子

568

积分

Rank: 5Rank: 5

UID
159593
好友
0
蛮牛币
1018
威望
0
注册时间
2016-7-30
在线时间
175 小时
最后登录
2018-4-25
发表于 2017-9-22 10:46:31 | 显示全部楼层
学习了 很给力呀

回复

使用道具 举报

7日久生情
1683/5000
排名
1138
昨日变化

6

主题

121

帖子

1683

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
144553
好友
4
蛮牛币
5710
威望
0
注册时间
2016-4-5
在线时间
640 小时
最后登录
2018-6-19

活力之星

发表于 2017-9-22 11:20:08 | 显示全部楼层
厉害厉害,学习了

回复

使用道具 举报

3偶尔光临
164/300
排名
9579
昨日变化
2

3

主题

17

帖子

164

积分

Rank: 3Rank: 3Rank: 3

UID
244532
好友
1
蛮牛币
168
威望
0
注册时间
2017-9-19
在线时间
43 小时
最后登录
2018-6-19
发表于 2017-9-22 13:36:28 | 显示全部楼层
感谢感谢。很好的使用教程

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表