【Godot 】FunctionTree 功能树 简单使用教程

本文介绍如何使用Godot游戏引擎中的功能树插件快速实现角色移动、旋转及技能释放等功能,通过自定义节点扩展游戏逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Godot 功能树

项目地址:Apprentice/FunctionTree (gitee.com)

使用 FunctionTree 快速开发角色功能

示例教程

在 test 文件夹中有个 test01 示例,可进入参考查看

添加基本节点

在一个 KinematicBody2D 节点下点击添加节点,搜索 FunctionRoot 点击添加。添加后选中 FunctionRoot ,右侧将会出现一列可添加的节点列表,双击天机 BlackboardStandardCustom 节点

在这里插入图片描述

场景根节点更名为 Player,创建一个 player 文件夹,保存场景到里面。

在这里插入图片描述

添加移动功能

选中 Standard 节点,添加 Actions 节点,然后选中 Actions 节点,双击添加右侧节点列表中的 Move 节点

在这里插入图片描述
在这里插入图片描述

选中 Custom 节点,添加 Controllers 节点,然后选中 Controllers 节点,双击添加 CustomFunction 节点

在这里插入图片描述
在这里插入图片描述

双击场景树中的 CustomFunction 节点,重命名为 CMove,意为 Control Move(控制移动),然后在编辑器最右侧检查器面板中给这个脚本扩展一下

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在代码编辑视图中按下 Ctrl + Alt + Shift + S ,或者点击代码编辑上的代码菜单(这个是我自己的一个脚本插件添加上的,默认没有这个),如下图,然后弹出重写函数弹窗,勾选 _process_input 方法,点击 OK 按钮

在这里插入图片描述
在这里插入图片描述

生成如下代码:

extends "res://addons/function_tree/src/custom/CustomFunction.gd"


#(override)
func _process_input(arg0):
	._process_input(arg0)
	pass

重写 _process_input ,获取用户输入,根据玩家按下的键盘控制节点移动

extends "res://addons/function_tree/src/custom/CustomFunction.gd"


#(override)
func _process_input(arg0):
    # 获取用户输入(下面四个是小键盘上的按键,按下进行控制)
	var dir = Input.get_vector("ui_left","ui_right","ui_up","ui_down")
    # 获取 Move 功能节点,操控其移动
	get_function("Move").control(dir)

我们将文件系统中 icon.png ,Godot 小图标拖拽到场景中

在这里插入图片描述

还差一点,给场景根节点 Player 添加一个脚本,并写入如下代码

extends KinematicBody2D


export var move_speed : int = 300


onready var root = $FunctionRoot


func _ready():
	# 设置移动速度
	root.get_property().move_speed = move_speed

让我们按下 F6 ,进行运行当前场景,按下小键盘进行移动

在这里插入图片描述

添加旋转功能

选中场景树中的 Actions 节点,双击添加 TurnTo 节点,选中 Controllers 节点,双击右侧 CustomFunction 添加节点,并重命名为 CTurnTo,选中这个 CTurnTo 节点,在编辑器最右侧检查器面板中进行扩展脚本

在这里插入图片描述
在这里插入图片描述

在代码编辑视图中按下 Ctrl + Alt + Shift + S ,或者点击代码编辑上的代码菜单,弹出窗口中勾选 _process_input ,点击 OK,写入控制旋转代码,让节点随着鼠标位置进行旋转,脚本代码如下

extends "res://addons/function_tree/src/custom/CustomFunction.gd"


#(override)
func _process_input(arg0):
	# 获取鼠标的全局位置
	var mouse_pos = (host as Node2D).get_global_mouse_position()
	# 旋转到鼠标位置
	get_function("TurnTo").control(mouse_pos)

按下 F6 运行当前场景,按小键盘让角色移动到场景中,鼠标移动一下查看是否进行了旋转

在这里插入图片描述

添加技能

选中 Standard 节点,添加 Skills 节点,然后选中 Skills 节点,双击添加右侧节点列表中的 Sprint 节点,选中 Sprint 节点,修改 duration 属性持续时间设为 0.5

在这里插入图片描述
在这里插入图片描述

添加键位映射,添加鼠标的映射,添加 click

在这里插入图片描述
在这里插入图片描述

设置为鼠标左键点击

在这里插入图片描述

Godot 的 Input 类获取 click 事件,就代表要获取鼠标点击的事件,点击 关闭 按钮

在这里插入图片描述
在这里插入图片描述

选中场景树中的 Controllers 节点,双击右侧 CustomFunction 添加节点,并重命名为 CSprint,选中这个 CSprint 节点,在编辑器最右侧检查器面板中进行扩展脚本,重写 _process_input 方法,控制 Sprint 技能的使用 ,脚本代码如下

extends "res://addons/function_tree/src/custom/CustomFunction.gd"


#(override)
func _process_input(arg0):
	if Input.is_action_pressed("click"):
		# 获取鼠标的全局位置
		var mouse_pos = (host as Node2D).get_global_mouse_position()
		# 操作 Sprint 方法,冲刺到鼠标位置
		get_function("Sprint").control(mouse_pos)

按下 F6 运行当前场景,点击鼠标,看看节点是否进行了冲刺在这里插入图片描述


经过这个简单的教程之后,不知你对这个插件是否有了兴趣?现在我将介绍一下这个插件的一个制作思路。分为 Standard 类的节点和 Custom 类的节点。将通用功能放在 Standard 类下的节点,将各种各样的逻辑和操作写在 Custom 类的节点下,在 Custom 下的节点中调用 Standard 下的节点的功能。如此进行分类。

根节点
标准节点
自定义节点
标准节点层1
标准节点层...
自定义节点层...
Function1
Function2
自定义子节点...
自定义子节点...

Standard 与 Custom 下的节点的区别

Standard 类下方的子节点尽量都不要重写(如果你了解这个节点的执行逻辑的话,也可以扩展脚本,但不建议这样做)

Custom 类下方的子节点都要进行重写才能使用其功能,否则其只有逻辑,没有功能没有效果

Standard 下的节点提供功能,节点只进行属性的设置,增加功能节点;在 Custom 下的节点中进行扩展脚本调用 Standard 下的节点的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值