作为一名三流程序,最近又开始写UI了。Slate又不会,只能用用UMG才维持得了生活这样子。
在做类似背包收集品的时候用到了ListView,没用过的话真的很容易懵逼,以为出现了各种bug。中文教程很少,还是各种google search加自己尝试之后才慢慢搞清楚。记录总结了测试研究的过程,与大家分享,希望能帮到跟我一样困惑的小白们。(使用版本:4.24.3)提要:
ListView(列出视图)是什么?
一、准备工作
二、先晕为敬——将EntryWidget同时作为Item和Entry使用问题一:混淆了Item和Entry,其实Item里的数据并没有传入Entry。
三、灵异事件——单选模式却出现了多选?问题二:ListView替你控制的是Entry的SelectState(选择状态),而不是Item的。同一个Entry一般会用来表示多个Item。
关键事件调用顺序四、总结
ListView(列出视图)是什么?
列出视图:允许显示数千个项目的一个虚拟列表。
这里的官方说明似乎有点绕,因为语言调成了中文,项目条目很容易混淆,我们用英文替换掉通俗一点解释:
一、需要注意 Item 和 Entry 的重要区别。
ListView自身包含n个 Item ,但不代表就会在屏幕上创建n个 Entry 。
比如,用ListView做的可以滚动查看的背包,一共有200件装备,但屏幕的大小有限,那么就可能只会创建5个 Entry 。
(这里每件装备的信息就是 Item ,用来显示这些信息的UI控件,就是 Entry 。)二、要把Widget变成可用的Entry,必须要继承自 IUserObjectListEntry 接口。
请记住 Item 和 Entry , 这是ListView中的重要概念,提前知道了这两个东西,理解起来就会好很多。
一、准备工作
1.新建一个第一或第三人称项目。新建两个Widget分别命名为 ListViewWidget 和 EntryWidget 。
2.打开FirstPersonCharacter/ThirdPersonCharacter蓝图,加入打开关闭UI界面的逻辑。
FlipFlop节点:第一次执行A,第二次执行B,循环反复。实用性很高。
类似的还有DoOnce节点(只执行一次),蓝图的流程控制节点用起来十分方便,建议过一遍官方文档:UE4蓝图---流程控制节点
3.打开EntryWidget,将默认存在的Canvas Panel删掉,然后拉一个Border再拉一个Text并设置居中。Border和Text都设置为变量方便之后传入数据。因为默认都为白色,所以要将Text颜色改为黑色才能看得见。
4.在EntryWidget的Class Settings中,按照之前的文档说明,想作为Entry需要添加IUserObjectListEntry 接口,然后记得点编译。
5.打开ListViewWidget,添加一个ListView并将Entry选为 EntryWidget ,调整Entry Spacing(条目间距)和Num Designer Preview Entries(设计器内预览条目数量),然后记得要点编译才生效。</