本文中的项目来源于 https://github.com/Siccity/xNode
1.5 Node介绍
在上一章我们终于了解了NodePort,那么这一章让我们来看看Node的构成
1.5.1 Node - Enum
这一部分的内容在NodePort中我们已经看到过了,我们来具体了解一下
[Serializable]
public abstract class Node : ScriptableObject {
///这两个枚举是在[Input]和[Output]中使用的,用来决定节点(NodePort)被连接后的显示方式
public enum ShowBackingValue {
///永远不显示
Never,
///只有在不连接的时候才显示
Unconnected,
///永远显示
Always
}
在这里给大家举个栗子,现在有四个节点abcd,如下:
//默认是ShowBackingValue.Unconnected
[Input(backingValue = ShowBackingValue.Never)] public float a;
[Input(backingValue = ShowBackingValue.Always)] public float b;
[Input] public float c;
[Input] public float d;
配上图应该很容易就看出来了吧:
- a即使连线了也不显示
- b即使不连线也会显示
- 而c和d表示了不在连线状态才显示
///表示该节点连接的类型
public enum ConnectionType {
///可以接受多个节点
Multiple,
///只接受一个节点
Override,
}
///表示Input能够接受的类型
public enum TypeConstraint {
//能够接受所有类型
None,
///能够接受相同和继承类
Inherited,
///只能接受同一类型
Strict,
}
这两个就很容易理解,就不多解释了,这一部分的枚举会在特性中用到
1.5.2 Node - Iterate & Dictionary
///所有接口的迭代器
public IEnumerable<NodePort> Ports {
get {
foreach (NodePort port in ports.Values) yield return port; } }
///所有输出接口的迭代器
public IEnumerable<NodePort> Outputs {
get {
foreach (NodePort port in Ports) {
if (port.IsOutput) yield return port; } } }
///所有输入接口的迭代器
public IEnumerable<NodePort> Inputs {
get {
foreach (NodePort port in Ports) {
if (port.IsInput) yield return port; } } }
///所有动态接口的迭代器
public IEnumerable<NodePort> DynamicPorts {
get {
foreach (NodePort port in Ports) {
if (port.IsDynamic) yield return port; } } }
///所有动态输出接口的迭代器
public IEnumerable<NodePort> DynamicOutputs {
get {
foreach (NodePort port in Ports) {
if (port.IsDynamic && port.IsOutput) yield return port; } } }
///所有动态输入接口的迭代器
public IEnumerable<NodePort> DynamicInputs {
get {
foreach (NodePort port