Files
netease-bedrock-wiki/mcguide/18-界面与交互/21-操作安全性说明.md
2024-12-23 10:57:59 +08:00

47 lines
3.7 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: 分钟
---
# 操作安全性
## <span id="LoadPrefab">加载自定义控件失败</span>
如果自定义控控件所在的文件中不存在该自定义控件或者该文件不合法不符合json格式缺少根节点下缺少"namespace"节点)就会导致该报错的产生。
## <span id="DeletePrefab">无法删除当前编辑的自定义控件</span>
当前正在编辑的自定义控件是不允许进行删除的。
## <span id="NamespaceDuplicate">UI名字已经被系统或原生使用</span>
在MC中已经存在了部分原生控件并且占用了一定的命名空间用户应当用其他名称命名UI文件
## <span id="CircularInherit">继承循环错误</span>
当前正在编辑自定义控件的时候,当控件继承关系比较复杂的时候,比较难察觉到继承导致的循环错误,比如三个控件 ABC如果继承关系为 B继承自AC继承自B那么在编辑A的时候如果将在A中实例化C并且保存到A中那么就会间接导致自定义控件C所继承的对象中包含自己从而导致在实例化C的时候会出现循环错误。
## <span id="CircularInclude">包含循环错误</span>
当前正在编辑自定义控件的时候,当控件继承关系以及包含关系比较复杂的时候,容易导致这个包含循环错误,比如三个 ABC如果继承关系为B继承自C如果C中包含了一个继承自A的子节点在B不改写自身子节点的情况时相当于B也包含了一个继承自A的子节点如果此时用户编辑的是自定义控件A对B实例化在A中的时候就会间接导致自定义控件A中包含了继承自自定义控件A的节点从而导致循环错误。
## <span id="AddVariable">添加变量失败</span>
用户尝试更新的变量为全局变量或者是UI编辑器暂时不支持的变量类型比如 "\$variable_1": "\$variable_2" 这类变量引用变量的情况,则会导致该报错
## <span id="UpdateVariable">更新变量失败</span>
报错原因见[添加变量失败](#AddVariable)。
## <span id="LostRef">丢失引用导致的变量无法解析</span>
比如一个image类型的控件基础属性 "alpha" 引用了变量 "\$myAlpha"并且该变量是声明在他的父组件那么在将该image控件创建为自定义控件的时候"\$myAlpha"变量是不存在于该自定义控件上的(假设该控件身上也没有声明 "\$myAlpha|default"变量),因此在实例该自定义控件的时候,他的实例一开始也是不包含该变量的,如果将这个实例挂载到一个不含有"\$myAlpha"变量的父节点树下,那么将会导致该实例在解析属性 "alpha" 的时候搜索不到 "\$myAlpha"变量而报解析错误。
同样,如果一个控件为万用控件,它继承的控件是由变量解析的,如果搜索不到变量则解析不了它所继承的对象,从而导致它变为一个破损控件。
因此,用户在删除变量以及创建自定义控件过程中,都会提示用户该潜在的风险。
## <span id="CircularVariable">变量循环</span>
在更改万用控件所继承的变量值的时候会对变量值所对应的自定义控件进行解析生成假设一种情况万用控件A继承自变量 "\$myCustomControl",并且值为 "myNamespace.myCustomControl"也就是A继承了自定义控件 myCustomControl如果这个自定义控件恰好里面也包含一个继承自变量 "\$myCustomControl"的万用控件,并且该万用控件的这个变量也被解析为 "myNamespace.myCustomControl",那么此时就会造成变量循环,在解析继承控件的时候会不断进行循环变量的解析。