找回密码
 注册帐号

扫一扫,访问微社区

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

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

120

主题

562

帖子

6898

积分

Rank: 9Rank: 9Rank: 9

UID
3579
好友
108
蛮牛币
5179
威望
0
注册时间
2013-9-10
在线时间
1483 小时
最后登录
2019-4-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、编辑条的值改变没有关联到指定的结构体变量中,也即无法动态修改结构体变量的值


未完待续。。。。




回复

使用道具 举报

排名
64922
昨日变化

0

主题

7

帖子

49

积分

Rank: 1

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

使用道具 举报

5熟悉之中
744/1000
排名
4111
昨日变化

1

主题

234

帖子

744

积分

Rank: 5Rank: 5

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

使用道具 举报

5熟悉之中
744/1000
排名
4111
昨日变化

1

主题

234

帖子

744

积分

Rank: 5Rank: 5

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

使用道具 举报

7日久生情
1865/5000
排名
1961
昨日变化

1

主题

93

帖子

1865

积分

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

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

使用道具 举报

7日久生情
2146/5000
排名
2613
昨日变化

2

主题

1089

帖子

2146

积分

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

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

使用道具 举报

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

0

主题

1286

帖子

2294

积分

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

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

使用道具 举报

7日久生情
2251/5000
排名
584
昨日变化

1

主题

137

帖子

2251

积分

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

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

使用道具 举报

3偶尔光临
294/300
排名
7538
昨日变化

2

主题

33

帖子

294

积分

Rank: 3Rank: 3Rank: 3

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

使用道具 举报

3偶尔光临
255/300
排名
9677
昨日变化

1

主题

41

帖子

255

积分

Rank: 3Rank: 3Rank: 3

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

使用道具 举报

3偶尔光临
264/300
排名
8746
昨日变化
1

0

主题

37

帖子

264

积分

Rank: 3Rank: 3Rank: 3

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

使用道具 举报

5熟悉之中
520/1000
排名
6836
昨日变化

0

主题

191

帖子

520

积分

Rank: 5Rank: 5

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

使用道具 举报

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

0

主题

174

帖子

3403

积分

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

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

使用道具 举报

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

0

主题

215

帖子

1580

积分

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

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

使用道具 举报

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

5

主题

210

帖子

1431

积分

Rank: 6Rank: 6Rank: 6

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

使用道具 举报

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

本版积分规则