【Unity】UIElements Expansions: Reorderable List

UIElements Expansions是Unity编辑器的扩展资产。

UIElements Expansions: Reorderable List

UIElements Expansions: Reorderable List」强烈支持自Unity 2019.1起引入的「UIElements」。

什么是UIElements

UIElements是一项功能,它取代了Unity 2019.1起引入的当前Unity编辑器的GUI系统(IMGUI)。

Unity HTML为「UXML」,Unity样式表「USS」对于一些如创建HTML和CSS网页的组合Unity可以产生GUI。

当然,您可以像以前一样在编辑器脚本中编写编辑器处理,并且提供了类似jQuery的方法,因此您可以创建像HTML5这样的动态GUI。

将来,计划不仅替换编辑器,还替换运行时GUI(当前的uGUI),并且预计将委托将来的Unity GUI。

但是,它的潜力很高,但是它刚刚被引入,因此没有足够的功能来认真使用它。

UIElements Expansions」是一种资产,可大力支持缺失的部件。

此「UIElements Expansions: Reorderable List 」主要支持三个功能。

  • 全局样式表
  • 检验员自动分配功能
  • Reorderable List

全局样式表

作为USS来源的CSS通常使用一个或多个通用文件,并将它们与HTML标头一起加载。

可以使用与CSS相同的方式来使用全局样式表

检验员自动分配功能

Unity ,您可以自由地重写检查器的GUI,例如组件和可编写脚本的对象。但是在这种情况下,您需要为该组件编写自己的编辑器脚本。

尽管现在可以用HTML之类的UXML描述配置,但是它有点麻烦,因为必须在编辑器脚本中编写将创建的UXML分配给哪个组件。

检查器自动分配功能」自动确定仅使用UXML文件名使用哪个组件,而无需编写编辑器脚本,并自动分配它。

Reorderable List

Reorderable List是有用的功能,也可以在IMGUI中使用。您可以直观地操作序列化的列表和数组,并自由更改其顺序。但是,即使在IMGUI时代,实现也是复杂且非常麻烦的。

此外,由于没有实现UIElement的方法,因此您最终只能使用IMGUI。因此,无法应用UIElements USS,并且不能自由设置设计。

另外,IMGUI的可重新排序列表性能较差,并且缺点是,当元素数量增加时,检查器的响应将变得非常慢。

UIElements Expansions: Reorderable List可以使用UIElements中新创建的可重新排序列表。

可以直接调整IMGUI中的“可重新排序列表”的设计,并且可以使用USS进行精细的设计调整。

使用方法

汇入

Unity Asset Store购买。

购买后,您可以从「我的资产」中导入。

全局样式表

您可以按原样使用它。

我想改变风格

在「Assets/Masamune/Modules/unity.style/Styles」文件夹中编辑「PersonalStyle」和「ProStyle」。

通常的情况 , 避孕套被反射到可以使用的专业避孕套(黑色基础的避孕套)把因为编辑「ProStyle」所以在当差的情况下在「PersonalStyle」 , Unity Pro以及Plus当场。

我想使用自己的样式表

在「Assets/Masamune/Modules/unity.style/Resources」文件夹中选择「EditorStyleInfo」。编辑屏幕显示在检查器中。

打开「StyleSheet Settings」选项卡,您应该看到「Style Sheets」和「Style Sheets For Pro Skin」的列表。指定分别应用了普通编辑器和专业皮肤的编辑器的样式文件。

您可以通过按「」按钮添加样式文件。优先级越低,优先级越高,因此请根据需要更改顺序。

检验员自动分配功能

通过创建与继承创建的「MonoBehaviour」或「ScriptableObject」的类相同名称的uxml文件,可以将uxml应用于创建的类的检查器屏幕。

例子

创建继承「MonoBehaviour」的「MyMonoScript」。

// MyMonoScript.cs
public class MyMonoScript : MonoBehaviour {
  public string name;
  public int age;
  ...
}

创建相同的「MyMonoScript」uxml文件。 (在“Assets”文件夹下的任何位置都可以)

// MyMonoScript.uxml
<?xml version="1.0" encoding="utf-8"?>
<engine:UXML
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:engine="UnityEngine.UIElements"
    xmlns:editor="UnityEditor.UIElements"
    xsi:noNamespaceSchemaLocation="../../../../UIElementsSchema/UIElements.xsd"
>
  <editor:PropertyField binding-path="name" class="box" />
  <editor:PropertyField binding-path="age" class="box" />    
</engine:UXML>

这将显示应用了UIElements样式的Inspector屏幕。

使用MonoBehaviour和ScriptableObject之外的其他对象

如果要在「MonoBehaviour」或「ScriptableObject」(例如列表或数组中的原始类)中使用此功能,则可以通过继承「SerializableBehaviour」来实现。

使用方法是创建一个类「MySerializable」,该类以与「MonoBehaviour」和「ScriptableObject」继承类相同的方式继承「SerializableBehaviour」。由于必须指定可以对定制类进行序列化,因此添加了[System.Serializable]属性。

// MySerializable.cs
[System.Serializable]
public class MySerializable : SerializableBehaviour {
  public string name;
  public int age;
  ...
}

以相同的方式,创建一个名为「MySerializable」的uxml文件。

// MySerializable.uxml
<?xml version="1.0" encoding="utf-8"?>
<engine:UXML
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:engine="UnityEngine.UIElements"
    xmlns:editor="UnityEditor.UIElements"
    xsi:noNamespaceSchemaLocation="../../../../UIElementsSchema/UIElements.xsd"
>
  <editor:PropertyField binding-path="name" class="box" />
  <editor:PropertyField binding-path="age" class="box" />    
</engine:UXML>

现在将显示「MySerializable」类,并在检查器中应用了UIElement。

Reorderable List

如果要在特定类的List或数组检查器中显示Reorderable List,请在该类的uxml文件中编写以下内容。

<editor:ReorderableList binding-path="List或要应用的数组变量名称" />

这将显示Reorderable List,并自动应用样式。

我想将皮肤应用于Reorderable List的元素

在常规样式表说明中,无法更改ReorderableList中元素的样式。

但是,与其他元素一样,内部类也是准备好的,因此可以通过指定每个类来更改样式。

.unity-reorderable-list : Class that specifies the entire Reorderable List
 .unity-reorderable-list__header : Header part
     .unity-reorderable-list__icon : Icon in header
     .unity-reorderable-list__label : Label in header
     .unity-reorderable-list__add : Add button in header
     .unity-reorderable-list__remove : Remove button in header
 .unity-reorderable-list__content : Content part
     .unity-reorderable-list__item : Each element in the content
         .unity-reorderable-list__handle : Handle within each element
         .unity-reorderable-list__single : The part excluding the handle when each element is a single field (primitive type such as string or int)
 .unity-reorderable-list__footer : Footer part 

有关详细信息,请参阅「Assets/Masamune/Modules/unity.style/Styles」文件夹中的「PersonalStyle」和「ProStyle」。

总结

UIElements Expansions: Reorderable List」 强烈支持自Unity 2019.1起引入的「UIElements」。特别是,您将能够轻松编写以前需要编写编辑器脚本的检查器设计。

此外,使用「Reorderable List」可轻松编辑列表数据。

该设计已经过扁平化,以匹配Unity 2019.3,它一次很酷,因此您可以舒适地使用它。

如果您有兴趣,请查看资产商店!

发表评论

电子邮件地址不会被公开。