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

扫一扫,访问微社区

开发者专栏

关注:1907

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

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

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

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

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

62

主题

232

帖子

1273

积分

Rank: 9Rank: 9Rank: 9

UID
54986
好友
10
蛮牛币
10932
威望
0
注册时间
2014-11-12
在线时间
373 小时
最后登录
2017-10-20

专栏作家

发表于 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);  
    }  
  
    
  
}  


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

如下图:






回复

使用道具 举报

2初来乍到
139/150
排名
13195
昨日变化
2

0

主题

46

帖子

139

积分

Rank: 2Rank: 2

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

回复 支持 反对

使用道具 举报

5熟悉之中
625/1000
排名
4506
昨日变化
32

1

主题

221

帖子

625

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

7日久生情
1580/5000
排名
1960
昨日变化
1

11

主题

350

帖子

1580

积分

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

UID
148830
好友
3
蛮牛币
2429
威望
0
注册时间
2016-5-17
在线时间
657 小时
最后登录
2017-10-20
发表于 2017-9-21 15:44:15 | 显示全部楼层

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

使用道具 举报

5熟悉之中
576/1000
排名
3252
昨日变化
24

2

主题

84

帖子

576

积分

Rank: 5Rank: 5

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

回复 支持 反对

使用道具 举报

4四处流浪
346/500
排名
4995
昨日变化
1

2

主题

30

帖子

346

积分

Rank: 4

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

回复 支持 反对

使用道具 举报

5熟悉之中
663/1000
排名
3183
昨日变化
2

0

主题

77

帖子

663

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

7日久生情
3667/5000
排名
59
昨日变化

2

主题

401

帖子

3667

积分

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

UID
3490
好友
4
蛮牛币
9199
威望
0
注册时间
2013-9-9
在线时间
952 小时
最后登录
2017-10-21

VIP

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

回复 支持 反对

使用道具 举报

5熟悉之中
821/1000
排名
3434
昨日变化

3

主题

226

帖子

821

积分

Rank: 5Rank: 5

UID
159631
好友
1
蛮牛币
1251
威望
0
注册时间
2016-7-30
在线时间
260 小时
最后登录
2017-10-20

迈向小康

发表于 2017-9-22 09:02:09 | 显示全部楼层
谢谢分享

回复

使用道具 举报

5熟悉之中
925/1000
排名
3957
昨日变化
4

0

主题

467

帖子

925

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

4四处流浪
429/500
排名
4334
昨日变化
26

0

主题

48

帖子

429

积分

Rank: 4

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

回复

使用道具 举报

5熟悉之中
794/1000
排名
3299
昨日变化

1

主题

125

帖子

794

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

3偶尔光临
250/300
排名
7054
昨日变化
3

0

主题

42

帖子

250

积分

Rank: 3Rank: 3Rank: 3

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

回复

使用道具 举报

6蛮牛粉丝
1249/1500
排名
1704
昨日变化

6

主题

117

帖子

1249

积分

Rank: 6Rank: 6Rank: 6

UID
144553
好友
4
蛮牛币
3946
威望
0
注册时间
2016-4-5
在线时间
504 小时
最后登录
2017-10-20

活力之星

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

回复

使用道具 举报

排名
12446
昨日变化
4

0

主题

8

帖子

72

积分

Rank: 2Rank: 2

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

回复 支持 反对

使用道具 举报

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

本版积分规则

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