游戏蛮牛学习群(纯技术交流,不闲聊):159852603
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:2315

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

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

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

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

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

72

主题

312

帖子

1518

积分

Rank: 9Rank: 9Rank: 9

UID
54986
好友
11
蛮牛币
2437
威望
0
注册时间
2014-11-12
在线时间
451 小时
最后登录
2018-9-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);  
    }  
  
    
  
}  


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

如下图:





本帖被以下淘专辑推荐:


回复

使用道具 举报

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

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

回复 支持 反对

使用道具 举报

7日久生情
1524/5000
排名
1521
昨日变化
4

1

主题

379

帖子

1524

积分

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

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

回复

使用道具 举报

7日久生情
2137/5000
排名
1375
昨日变化

14

主题

417

帖子

2137

积分

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

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

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

使用道具 举报

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

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熟悉之中
850/1000
排名
3352
昨日变化
1

9

主题

172

帖子

850

积分

Rank: 5Rank: 5

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

回复 支持 反对

使用道具 举报

5熟悉之中
960/1000
排名
2635
昨日变化

1

主题

118

帖子

960

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

7日久生情
4544/5000
排名
45
昨日变化

2

主题

492

帖子

4544

积分

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

UID
3490
好友
4
蛮牛币
1747
威望
0
注册时间
2013-9-9
在线时间
1196 小时
最后登录
2018-9-24

VIP

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

回复 支持 反对

使用道具 举报

7日久生情
1640/5000
排名
1541
昨日变化

3

主题

354

帖子

1640

积分

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

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

回复

使用道具 举报

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

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熟悉之中
654/1000
排名
3429
昨日变化
1

1

主题

77

帖子

654

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

6蛮牛粉丝
1420/1500
排名
1896
昨日变化

1

主题

152

帖子

1420

积分

Rank: 6Rank: 6Rank: 6

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

回复

使用道具 举报

5熟悉之中
575/1000
排名
4084
昨日变化

1

主题

63

帖子

575

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

7日久生情
1799/5000
排名
1051
昨日变化

6

主题

123

帖子

1799

积分

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

UID
144553
好友
4
蛮牛币
6190
威望
0
注册时间
2016-4-5
在线时间
674 小时
最后登录
2018-9-17

活力之星

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

回复

使用道具 举报

3偶尔光临
175/300
排名
9587
昨日变化

3

主题

19

帖子

175

积分

Rank: 3Rank: 3Rank: 3

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

回复 支持 反对

使用道具 举报

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

本版积分规则

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