简介

本章将会介绍节点编辑器中的特性和其作用,以及使用方式。


数据结构介绍

节点编辑器的所有数据都存在Graph中,共包含以下三种主要数据。

  • Node,只有IDPosition两条数据,
  • Connection,包含起始节点和目标节点的ID,以及接口名称
  • Group,包含ID组名节点ID列表等数据。

节点的静态数据

节点的静态数据(默认数据)存储在GraphProcessorUtil中,下方的特性定义的静态数据都存储在此。

  • Node Menu Attribute,特性决定了在编辑时节点在节点列表中的位置,并且菜单的最后一项会作为节点的默认名称。
  • Node Title Attribute,该特性用于替换默认标题,当然也可以通过BaseNodeVM.Title字段修改标题。
  • Node Title Color Attribute,该特性用于替换默认标题背景色,也可以通过BaseeNodeVM.TitleColor字段修改。
  • Node Tooltip Attribute,该特性用于给节点View增加悬停提示,可以通过BaseNodeVM.Tooltip字段修改提示文字。

下面是使用方法:

1
2
3
4
5
6
7
[NodeMenu("Custom/MyNode")]
[NodeTitle("我的节点")]
[NodeTitleColor(1f, 0, 0)]
public class MyNode : BaseNode
{

}

VM与M的映射关系

想要使用一个Graph对象,必须要有一个符合条件的VM对象来控制,默认的BaseGraph对应BaseGraphVM,VM基类没有其他功能,需要通过继承实现更多功能。

如何添加映射?

使用ViewModelAttribute,该特性的使用方式是挂在VM类上,作用是将VM类和Model类一一对应起来,映射数据存储在ViewModelFactory中,可通过ViewModelFactory.GetViewModelType(modelType)来获取Model类对应的VM类,ViewModelFactory是一个通用类,属于GraphProcessor依赖的一部分。

下面是一个简单的自定义节点,通过ViewModel特性,把VM类和Model类做了映射。如果没有对应的VM类,会自动创建默认的BaseNodeVM对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[NodeMenu("Custom/MyNode")]
[NodeTitle("我的节点")]
[NodeTitleColor(1f, 0, 0)]
public class MyNode : BaseNode
{

}

[ViewModel(typeof(MyNode))]
public class MyNodeVM : BaseNodeVM
{
public MyNodeVM(MyNode model) : base(model)
{
}
}

结尾

GraphProcessor基础运用所需要的特性不多,主要是M和VM的映射,本章到此结束,下期将会用节点编辑器做一个简单的计算器出来。如果有其他问题可以通过我Github主页的QQ或者邮箱直接询问。