Files
netease-modsdk-wiki/docs/mcguide/20-玩法开发/12-可视化编程/10-新版逻辑编辑器使用说明/70-节点基础.md
2025-03-18 14:46:12 +08:00

100 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 节点基础
新版逻辑编辑器提供的蓝图在使用上与Python代码保持着比较大的一致性。使用不同类型的节点会有不同的规则。
## 让蓝图生效
注意,想要让你写的节点图运行起来,你需要将蓝图零件挂接至一个勾选有预加载的空预设(请参考[新建预设并添加素材](../../14-预设玩法编程/9-第一个预设Mod/1-新建预设并添加素材.md)),或者挂接至预设,并将其通过关卡编辑器放置在场景中。
![image-20211103214606192](./images/image-20211103214606192.png)
![image-20211103214626299](./images/image-20211103214626299.png)
## 监听和调用
通过在图表的空白处右键浏览节点时,你会发现我们相同的节点会有不同的前缀,分别是“监听”和“调用”。
![image-20211103204900301](./images/image-20211103204900301.png)
调用的意思是执行这个接口的操作比如“发送向某个玩家聊天框消息”如下图你可以看到调用类型的节点既有“In”也有“Out”有执行引脚才能连到节点图中用于执行逻辑。
监听的意思是当“发送聊天框消息”这个接口被调用的时候。可以看到监听类型的节点没有“In”只有“Out”因为它表示一个时机在这个时机生效并开始顺序想“Out”连接的节点执行。
![image-20211103205025435](./images/image-20211103205025435.png)
## 调用对象和静态方法
这部分需要你对面向对象有一个基本的概念,这是一个编程的概念,如果你不知道的话,可以看这个视频:[什么是面向过程编程,面向对象编程](https://www.bilibili.com/video/BV1pV411d7sL?from=search&seid=7248194267465509786&spm_id_from=333.337.0.0)UP主对此进行了深入浅出的讲解。
我们以下面两个节点举例,第一个节点是静态方法,不需要对象即可调用。
第二个节点是零件的节点,只能通过零件的对象(实例)调用,你可以发现在此类节点的参数中,都包含一个“调用对象”。
![image-20211103210846572](./images/image-20211103210846572.png)
如果你希望自身去调用这个接口这个零件本身去执行这个接口你需要通过自身self调用即下面这样。但是这种情况实在是太多了所以我们做了简化处理即如果调用对象没有传入数据那么就默认调用对象的是自身self
![image-20211103211835382](./images/image-20211103211835382.png)
现在举另外的例子,比如,你希望摧毁自己的父对象,那么显然你需要让“父对象”去调用摧毁这个接口,如下图(因为要销毁的是预设对象,你需要使用预设对象的销毁接口)。
![image-20211103212200759](./images/image-20211103212200759.png)
![image-20211103212241434](./images/image-20211103212241434.png)
## 获取/设置变量
我们提供了独立的变量管理功能,在新建变量之后,你可以通过直接将变量拖拽出来,并选择获取和设置两种功能节点:
- 获取在获取的value输出节点可以获取到这个变量的值
- 设置在设置的value节点可以传入或者直接编辑希望设置的值
![image-20211110173230125](./images/image-20211110173230125.png)
## 获取/设置自定义接口
除了变量之外在Python里函数自定义接口也可以作为一种变量但是我们目前没有提供拖拽自定义接口来获取或者设置的方法。
你需要使用这两个节点来获取和设置自定义接口:
- 获取零件变量在key里面输入接口名称就可以从value节点获取到接口了
- 设置零件变量在key里面输入接口名称就可以把这个接口设置为value节点传入的节点
![image-20211110175952305](./images/image-20211110175952305.png)
## 零件预设接口和SDK组件接口
我们以传送玩家为例可以看到3种不同的调用接口
- 维度组件服务端接口归属于模组SDK的接口
- 零件接口:归属于预设架构的接口
- 预设对象接口:与零件接口基本一致
![image-20211110230003065](./images/image-20211110230003065.png)
下图左边是维度组件服务端接口右边是零件接口我们可以对照他们的api文档进行讲解。
![image-20211110230242256](./images/image-20211110230242256.png)
下图是维度组件服务端调用传送玩家的接口,我们重点关注他的示例。
![image-20211110230548813](./images/image-20211110230548813.png)
可以看到这里是先给player玩家创建了一个Dimension组件然后再调用组件执行后续的传送逻辑。
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateDimension(playerId)
comp.ChangePlayerDimension(0, (0,4,0))
```
所以这个节点的entityId应该传我们希望进行传送的玩家。
![image-20211110231010069](./images/image-20211110231010069.png)
像下图的零件接口的版本,翻译比较清晰。
![image-20211110231230648](./images/image-20211110231230648.png)
建议在有类似这种有相同名称的接口的情况下,直接选择零件接口。