自定义节点编辑器xNode——Node介绍(三)

本文详细介绍了xNode中的Node概念,包括Node的Enum特性、Iterate & Dictionary功能,以及Attributes和Other相关内容。文章通过实例展示了NodePort的用法,并强调了动态Ports在运行时的作用。此外,预告了下一部分将探讨NodeDataCache.UpdatePorts函数的工作原理。
摘要由CSDN通过智能技术生成

本文中的项目来源于 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 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值