Skip to content

自定义节点

蓝图功能基于开源项目litegraph开发,如果需要更详细的了解和定制蓝图功能,可前往了解该项目。

下面是一个自定义节点的示例

js
import {LiteGraph, LGraphNode} from '../../litegraph/litegraph'

class customNode extends LGraphNode {
    name = '数值' //卡片标题

    //在此方法中注册节点属性,输入solt和输出solt
    constructor() {
        //增加一个输入触点,  输入触点的名称, 值类型
        this.addInput("触发", "number")   
        //增加一个输出触点,  输出触点的名称, 值类型
        this.addOutput("输出", "number")
        //增加一个变量
        this.addProperty("value", 1.0);
        //如果需要在卡片中可以修改这个变量,就添加一个控件
        //增加一个控件用于修改变量,类型,显示名称,默认值,要修改的变量的名称
        this.widget = this.addWidget("number","value",1,"value");
        //设置输入组件在顶部
        this.widgets_up = true;                                    
    }

    //当蓝图运行时此方法会调用
    onStart(){

    }

    //当蓝图停止运行时调用
    onStop(){

    }

    //执行时的方法,如果节点设置为每帧运行,就会不停执行此方案
    onExecute() {
      //设置输出触点的值
      this.setOutputData(0, parseFloat(this.properties["value"]))
    }

    // 当addInput的触点收到出发事件时,将会调用此方法,其中action是input的名称
    onAction(action, param){
        
    }

    //动态返回卡片显示的title
    getTitle() {
        if (this.flags.collapsed) {
            return this.properties.value;
        }
        return this.title;
    };

    //自定义触点显示的文字
    onDrawBackground(ctx) {
        //show the current value
        this.outputs[0].label = this.properties["value"].toFixed(3);
    };

    //自定义ctx卡片的绘制
    // onDrawForeground(ctx){
       
    // }
}

//设置中文名称标题
customNode.title = '数值' 
//将自定义节点注册到蓝图,第一个是唯一key,同时也是菜单选项路径
LiteGraph.registerNodeType("input/customNode", customNode)

注册好的节点将会出现在对应的菜单栏中

bookEditNodes image

目前所有预置的节点脚本都放在src/viewCode/nodes文件夹下,并通过RegisterNodeType.js进行引用。当添加新的自定义节点时,请按照上述方式引用。

nodes文件下的所有修改,都应该同步到cocos项目中去,这样两边才能在运行蓝图时有相同的执行效果。 cocosNodes image