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

扫一扫,访问微社区

开发者专栏

关注:2104

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

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

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

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

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

68

主题

289

帖子

1413

积分

Rank: 9Rank: 9Rank: 9

UID
54986
好友
11
蛮牛币
11761
威望
0
注册时间
2014-11-12
在线时间
412 小时
最后登录
2018-2-12

专栏作家

发表于 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偶尔光临
159/300
排名
13548
昨日变化
2

0

主题

51

帖子

159

积分

Rank: 3Rank: 3Rank: 3

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

回复 支持 反对

使用道具 举报

5熟悉之中
924/1000
排名
2815
昨日变化

1

主题

269

帖子

924

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

7日久生情
1859/5000
排名
1606
昨日变化
1

11

主题

387

帖子

1859

积分

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

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

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

使用道具 举报

5熟悉之中
764/1000
排名
2559
昨日变化
1

2

主题

98

帖子

764

积分

Rank: 5Rank: 5

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

回复 支持 反对

使用道具 举报

5熟悉之中
616/1000
排名
3716
昨日变化

4

主题

109

帖子

616

积分

Rank: 5Rank: 5

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

回复 支持 反对

使用道具 举报

5熟悉之中
905/1000
排名
2531
昨日变化

1

主题

113

帖子

905

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

7日久生情
4014/5000
排名
52
昨日变化

2

主题

449

帖子

4014

积分

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

UID
3490
好友
4
蛮牛币
559
威望
0
注册时间
2013-9-9
在线时间
1045 小时
最后登录
2018-2-15

VIP

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

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1212/1500
排名
2363
昨日变化

3

主题

333

帖子

1212

积分

Rank: 6Rank: 6Rank: 6

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

回复

使用道具 举报

6蛮牛粉丝
1103/1500
排名
3330
昨日变化

0

主题

523

帖子

1103

积分

Rank: 6Rank: 6Rank: 6

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

回复

使用道具 举报

5熟悉之中
579/1000
排名
3433
昨日变化
2

0

主题

67

帖子

579

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

6蛮牛粉丝
1123/1500
排名
2392
昨日变化

1

主题

145

帖子

1123

积分

Rank: 6Rank: 6Rank: 6

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

回复

使用道具 举报

5熟悉之中
502/1000
排名
4149
昨日变化
2

0

主题

58

帖子

502

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

6蛮牛粉丝
1460/1500
排名
1384
昨日变化
2

6

主题

121

帖子

1460

积分

Rank: 6Rank: 6Rank: 6

UID
144553
好友
4
蛮牛币
4738
威望
0
注册时间
2016-4-5
在线时间
575 小时
最后登录
2018-2-22

活力之星

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

回复

使用道具 举报

2初来乍到
110/150
排名
10881
昨日变化
2

0

主题

8

帖子

110

积分

Rank: 2Rank: 2

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

回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐 上一条 /1 下一条

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