Files
netease-bedrock-wiki/mcguide/18-界面与交互/15-变量引用和万用控件.md
2024-12-23 10:57:59 +08:00

202 lines
8.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
front:
hard: 入门
time: 10分钟
---
# 变量引用和万用控件
## 属性变量引用
下图的4个控件是同一个自定义控件的实例。如果要实现类似下面这种各不相同的效果需要用到属性引用功能。
![image-20220420225806183](./images/image-20220420225806183.png)
自定义控件的实例只能修改根节点的属性。所以我们要想办法在PlayerAttr这个节点直接控制Label节点的内容属性。
在PlayerAttr节点增加一个变量绑定Label节点的内容。
![image-20220421140741765](./images/image-20220421140741765.png)
需要执行如下的操作:
1. 选中自定义控件的根节点如图这里是PlayerAttr
2. 点击功能区的新建变量
3. 在菜单中选择:新增属性变量
![image-20220504145038934](./images/image-20220504145038934.png)
这将打开一个新的面板——新建属性变量面板。
我们是选中PlayerAttr节点打开的
- 你在这个面板中可以选择**PlayerAttr**节点和**其子控件**的所有属性
- 并将这些属性作为**变量**开放到**PlayerAttr**的变量区
![image-20220421141059283](./images/image-20220421141059283.png)
我们选择**label**,并选中**内容**属性。
可以看到,当你选中内容时,变量类型也自动选择了文本内容。
这是因为你可以一次性绑定多个类型相同的属性,我们在这里自动帮你做了筛选。
填写好变量命名后比如AttrText点击确定。
![image-20220421141926913](./images/image-20220421141926913.png)
现在我们就在PlayerAttr的变量区成功创建了AttrText属性并且这个属性绑定的label控件的内容属性。
我们在这里把值修改为200可以看到预览窗里显示的值也变成了200。
![image-20220421154902941](./images/image-20220421154902941.png)
### 属性引用示例
现在让我们使用这一自定义控件快速实现一个货币展示HUD。
由于物品渲染的属性暂时不支持属性变量引用我们使用一个图片控件来代替并将这个图片控件命名为icon。
![image-20220422231615770](./images/image-20220422231615770.png)
接下来为PlayerAttr添加一个新的变量icon_texture并绑定icon控件的贴图属性。
![image-20220422231920563](./images/image-20220422231920563.png)
可以看到这个图片“消失”了。
![image-20220422232004877](./images/image-20220422232004877.png)
这是因为在PlayerAttr的变量区中这个新创建的变量icon_texture还没有赋值。
![image-20220422232032816](./images/image-20220422232032816.png)
接下来我们通过windows的文件夹在工作台的下载路径中找到编辑器的下载路径在这里可以找到物品的贴图文件夹。
然后找到绿宝石和钻石,两张贴图,并将其导入编辑器的贴图中。
![image-20220422232339065](./images/image-20220422232339065.png)
准备工作到此为止接下来我们创建一个新的界面文件。并在main画布下创建2个PlayerAttr的实例。
然后分别设置两个实例的变量区的icon_texture变量为钻石贴图和绿宝石贴图。
![image-20220422233027414](./images/image-20220422233027414.png)
效果如下。
![image-20220422233853370](./images/image-20220422233853370.png)
感觉icon有点小。我们打开这个自定义控件调整一下icon控件的尺寸然后返回界面文件可以看到这两个自定义控件实例的样式都被正常修改了。
![image-20220422233955055](./images/image-20220422233955055.png)
## 控件引用和万用控件
### 简介
下图是两个弹窗,他们的外框非常相似,但是内容不同。
![image-20220421175256869](./images/image-20220421175256869.png)
事实上他们使用的是同一个外框,你可以使用控件引用来实现这样的效果。
![image-20220421182539714](./images/image-20220421182539714.png)
### 制作内容物
我们先制作两个内容物。
- 内容1
综合[界面编辑器入门](./1-界面编辑器使用说明.md)[控件和控件属性](10-控件和控件属性.md)两篇文档,我们可以很轻松的实现这个控件。制作完毕之后,我们需要将其添加到控件库,详见[继承和自定义控件](13-继承和自定义控件.md)这里我们命名为QuestionContent。
![image-20220421182737967](./images/image-20220421182737967.png)
- 内容2
内容2是一个滚动列表想要实现上述形式的滚动列表我们需要先创建一个文本控件并将其添加到控件库比如命名为myLbl。
![image-20220421183031850](./images/image-20220421183031850.png)
然后我们创建一个滚动列表在属性“滚动内容”里选择刚才的自定义控件myLbl。并取消勾选下面的“显示背景”。然后将这个滚动列表添加到控件库这里我们将其命名为MessageScrollView。
> 其实“滚动内容”就是一个万用控件变量。
![image-20220421195331414](./images/image-20220421195331414.png)
### 制作外框
接下来我们实现一个外框。
外框非常简单由下面3个控件组成
- 一个图片作为背景图background节点
- 一个文本作为标题title节点
- 一个按钮作为关闭按钮closeBtn节点
![image-20220421175640956](./images/image-20220421175640956.png)
值得一提的是background图片控件的贴图使用的是原生贴图。
![image-20220421180831964](./images/image-20220421180831964.png)
贴图的路径如下,这张贴图在我的世界中自动支持九宫,无需在界面编辑器的属性中填写,是制作弹窗类控件的好资源。
![image-20220421180818792](./images/image-20220421180818792.png)
### 添加万用控件变量
接下来我们要在background节点下添加一个万用控件并将其作为变量开放到messageBoxPanel节点。这个功能很难理解我们推荐你跟着做完然后我们再做解释。
与属性变量的操作步骤类似:
1. 选中messageBoxPanel节点
2. 点击新增万用控件变量
![image-20220504144856133](./images/image-20220504144856133.png)
在弹出的菜单中
1. 选中background节点我们要把万用控件挂接为这个节点的子节点
2. 填写万用控件命名
3. 填写变量命名
4. 可以看到按照上述填写信息之后,编辑器将帮我们实现的操作,点击确定
![image-20220421180435644](./images/image-20220421180435644.png)
观察一下结果,可以发现
1. 在messageBoxPanel节点增加了一个v_content变量
2. 在background节点下增加了一个content控件
![image-20220421181333247](./images/image-20220421181333247.png)
3. 你可以在v_content中选择一个自定义控件库里的控件
![image-20220421181436672](./images/image-20220421181436672.png)
在修改v_content的属性值之前我们先调整一下content控件的尺寸使其可以始终填满外框视觉上的内容部分具体方法请参考[控件和控件属性](./10-控件和控件属性.md#位移尺寸高级用法的实际应用)。
我们在之前已经做好了两个内容物控件QuestionContent 和 MessageScrollView。
这里我们选择QuestionContent 可以看到我们的万用控件看起来和QuestionContent完全相同。
![image-20220421213710121](./images/image-20220421213710121.png)
### 控件引用总结
即,控件引用变量和万用控件可以实现的效果就是:**可以在属性面板中通过修改变量的值,将子控件的万用控件转变为某个自定义控件**。
理解了这些之后,我们再看一下滚动列表这个控件。
![image-20220421214153432](./images/image-20220421214153432.png)
我们在编辑器中强行把他展开你会发现滚动列表就是使用了一个万用控件scrolling_content
![image-20220421214242036](./images/image-20220421214242036.png)
并且这个万用控件的值被开放到了根节点scroll_view的属性面板的变量区的“滚动内容”属性。使你可以直接在最外层scroll_view修改滚动列表的内容物控件。
![image-20220421214546602](./images/image-20220421214546602.png)