找回密码
 注册帐号

扫一扫,访问微社区

zhang273162308 Unity实用小工具或脚本—利用反射制作动态编辑栏(一)

73
回复
1994
查看
[ 复制链接 ]
排名
141
昨日变化

124

主题

595

帖子

6994

积分

Rank: 9Rank: 9Rank: 9

UID
3579
好友
109
蛮牛币
5255
威望
0
注册时间
2013-9-10
在线时间
1542 小时
最后登录
2019-8-24

专栏作家活力之星游戏蛮牛QQ群会员蛮牛哥

2019-1-22 18:50:47 显示全部楼层 阅读模式

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

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

x
本帖最后由 zhang273162308 于 2019-1-23 09:13 编辑

一、前言
       在制作UI的时候,经常会碰到对不同的结构体或者类进行编辑,然后要根结构体或类的字段或属性制作对应的输入框。比如int型的输入框内就不能输入字符,就要限定输入框的类型;每个输入框还要对应字段或属性的名字。另外,不同的结构体或类的字段或属性的名字和类型都可能不一样。如果每一个结构体或类都要单独的制作一个编辑栏,每一个输入框都对应指定的字段或属性,如字段名称、类型等,无疑将是一个巨大的工作量。而且维护成本也很高,比如后续对某个结构体或者类添加或删除其中的某个字段,相应的也要手动修改编辑栏。本文就是提供一种可以实现动态创建结构体或类编辑栏输入框,根据结构体或类的字段名称、类型等进行创建可编辑的输入框。
二、实现
1、反射
    主要用的编程技巧是C#的反射功能,利用反射可以做下面的事情(C#本质论5.0第四版 472页):
1>:访问程序集中类型的元数据。其中包括像完整类型名和成员名这样的构造,以及对一个构造进行修饰的任何特性。
2>:使用元数据,在运行时动态调用一个类型的成员,而不是执行编译时绑定。
反射时指对程序集中的元数据进行检查的过程。在以前,当代码编译成一种机器语言时,关于代码的所有元数据(比如类型和方法名)都会被丢弃。相反,当C#编译成CIL时,它会维持关于代码的大部分元数据。除此之外,可以利用反射枚举程序集中的所有类型,找出满足特定条件的那些。
2、反射提取结构体中元数据信息
说了这么多理论的东西,我们就可以着手编写代码了,对结构体进行反射提取信息的代码如下:
游客,如果您要查看本帖隐藏内容请回复




上述代码中用到了一个自定义的类,UI2D_SubObjEditorAttr,代码:这段代码主要是对一个输入框和Text进行封装的类,Text显示变量的名称,如图所示:创建的单个编辑条的预设,只有一个Text和输入框
单个编辑条.png

游客,如果您要查看本帖隐藏内容请回复

3、使用方法
将定义的这两个结构体变量分别传给该方法,就可以实现根据结构体的字段自动创建该自动的编辑条,如图所示:
[mw_shl_code=csharp,true]void Update () {
               
        if(Input.GetKeyDown(KeyCode.C))
        {
           // OnCreateAttr_OnClick(curEditorRoute);
            OnCreateAttr_OnClick(curEditorRP);
        }

}

2.png

23.png



不同的结构体变量可以动态的创建不同的编辑条,并且将默认的值赋值给每个对应的编辑条。
三、总结
1、完成了初步的将不同的结构体动态的创建编辑条的功能
2、尚未根据不同字段的类型进行编辑条细化
3、编辑条的值改变没有关联到指定的结构体变量中,也即无法动态修改结构体变量的值


未完待续。。。。




回复

使用道具 举报

排名
64936
昨日变化

0

主题

9

帖子

58

积分

Rank: 2Rank: 2

UID
309391
好友
0
蛮牛币
70
威望
0
注册时间
2018-12-24
在线时间
47 小时
最后登录
2019-8-8
2019-1-23 09:18:41 显示全部楼层
利用反射制作动态编辑栏
回复 支持 反对

使用道具 举报

5熟悉之中
803/1000
排名
4110
昨日变化

1

主题

271

帖子

803

积分

Rank: 5Rank: 5

UID
245227
好友
0
蛮牛币
987
威望
0
注册时间
2017-9-21
在线时间
172 小时
最后登录
2019-8-23
2019-1-23 09:51:28 显示全部楼层
666666666666666666666
回复 支持 反对

使用道具 举报

5熟悉之中
803/1000
排名
4110
昨日变化

1

主题

271

帖子

803

积分

Rank: 5Rank: 5

UID
245227
好友
0
蛮牛币
987
威望
0
注册时间
2017-9-21
在线时间
172 小时
最后登录
2019-8-23
2019-1-23 09:58:07 显示全部楼层
这些看似能偷懒的东西, 最后都还是走回了手动一个个写的老路, 这么多种UI对应的数据类型你能写的完?
回复 支持 反对

使用道具 举报

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

3

主题

108

帖子

2139

积分

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

UID
219633
好友
0
蛮牛币
1871
威望
0
注册时间
2017-4-27
在线时间
1338 小时
最后登录
2019-8-22
2019-1-23 15:45:12 显示全部楼层
666666666666666666666
回复 支持 反对

使用道具 举报

7日久生情
2308/5000
排名
2612
昨日变化

2

主题

1134

帖子

2308

积分

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

UID
209046
好友
0
蛮牛币
3277
威望
0
注册时间
2017-3-30
在线时间
618 小时
最后登录
2019-8-24
2019-1-23 16:28:23 显示全部楼层
回复

使用道具 举报

7日久生情
2319/5000
排名
2248
昨日变化

0

主题

1285

帖子

2319

积分

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

UID
189581
好友
0
蛮牛币
3635
威望
0
注册时间
2016-12-5
在线时间
408 小时
最后登录
2019-8-23
2019-1-23 16:37:01 显示全部楼层
可以的给力啊
回复

使用道具 举报

7日久生情
2297/5000
排名
583
昨日变化

1

主题

145

帖子

2297

积分

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

UID
43081
好友
1
蛮牛币
1138
威望
0
注册时间
2014-9-1
在线时间
749 小时
最后登录
2019-8-20
2019-1-24 08:43:54 显示全部楼层
nity实用小工具或脚本—利用反射制作动态编辑栏
回复 支持 反对

使用道具 举报

3偶尔光临
297/300
排名
7541
昨日变化

2

主题

33

帖子

297

积分

Rank: 3Rank: 3Rank: 3

UID
244534
好友
0
蛮牛币
244
威望
0
注册时间
2017-9-19
在线时间
94 小时
最后登录
2019-6-3
2019-1-24 09:02:47 显示全部楼层
回复

使用道具 举报

3偶尔光临
262/300
排名
9678
昨日变化

1

主题

41

帖子

262

积分

Rank: 3Rank: 3Rank: 3

UID
180714
好友
0
蛮牛币
295
威望
0
注册时间
2016-11-4
在线时间
104 小时
最后登录
2019-6-13
2019-1-24 13:54:50 显示全部楼层
利用反射制作动态编辑栏,看看学习学习
回复 支持 反对

使用道具 举报

3偶尔光临
284/300
排名
8747
昨日变化

0

主题

37

帖子

284

积分

Rank: 3Rank: 3Rank: 3

UID
293269
好友
0
蛮牛币
253
威望
0
注册时间
2018-8-11
在线时间
111 小时
最后登录
2019-8-23
2019-1-24 15:42:21 显示全部楼层
谢谢大佬的分享,希望能够多学习学习
回复 支持 反对

使用道具 举报

5熟悉之中
612/1000
排名
6838
昨日变化

0

主题

200

帖子

612

积分

Rank: 5Rank: 5

UID
300324
好友
0
蛮牛币
288
威望
0
注册时间
2018-10-17
在线时间
218 小时
最后登录
2019-8-24
2019-1-26 10:34:38 显示全部楼层
6666666666666666666666666666
回复 支持 反对

使用道具 举报

7日久生情
3472/5000
排名
123
昨日变化

0

主题

174

帖子

3472

积分

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

UID
6304
好友
0
蛮牛币
8392
威望
0
注册时间
2013-10-24
在线时间
858 小时
最后登录
2019-8-24
2019-1-26 17:33:50 显示全部楼层
啥东西,这是.
回复

使用道具 举报

7日久生情
1612/5000
排名
1199
昨日变化

0

主题

230

帖子

1612

积分

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

UID
137070
好友
0
蛮牛币
3279
威望
0
注册时间
2016-2-20
在线时间
406 小时
最后登录
2019-6-15
2019-1-28 08:59:08 显示全部楼层
感谢大佬分享!
回复

使用道具 举报

6蛮牛粉丝
1444/1500
排名
2026
昨日变化

5

主题

210

帖子

1444

积分

Rank: 6Rank: 6Rank: 6

UID
228249
好友
1
蛮牛币
3446
威望
0
注册时间
2017-6-22
在线时间
547 小时
最后登录
2019-8-15
2019-1-28 11:06:49 显示全部楼层
正好需要,感谢分享
回复 支持 反对

使用道具 举报

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

本版积分规则