【杂谈】Godot4.4对话插件使用教程(dialogue manager 3)

学博而后可约,事历而后知要。

一、展示

请添加图片描述

二、准备工作

(一)下载插件

在godot引擎AssetLib中下载最新版本的Dialogue Manager 3插件(2025/3/23);

在这里插入图片描述

(二)启用插件

下载完毕后在当前界面右上点击插件,然后勾选启用后,上方出现 Dialogue 图标;

在这里插入图片描述

(三)找到示例对话气泡

此时文件系统中出现了 addons 文件夹,点开后找到 example_balloon,里面有你所需要的对话气泡模板;

在这里插入图片描述

(四)复制对话气泡

现在单独创建一个用于对话的文件夹,将它复制到新的文件夹中;展开后,发现两个场景文件和一个脚本文件(这两个场景共用的)。

在这里插入图片描述
一个场景是大的对话气泡:

在这里插入图片描述
另一个是小的:

在这里插入图片描述

(五)给文件改名(安全操作,可省略)

我们打开那个唯一的脚本,这个脚本的原来的类名如图:

在这里插入图片描述
然后我们根据自己的喜好让它变一下:

在这里插入图片描述
再改下脚本名:
在这里插入图片描述
好了,接下来就是把我们改过名的脚本附加在大对话气泡和小对话气泡上,改完后,脚本应该是你刚才改完的那个脚本的路径(每个人不一样),打开后类名也应该是刚才改的类目:
在这里插入图片描述
在这里插入图片描述


三、使用方法

(一)创建对话

切换到Dialogue图标,在左上角创建对话并保存:

在这里插入图片描述
在这里插入图片描述
上面就是示例对话,具体的语法规则到游戏中加载出来,就能摸清了。

(二)将dialogue_manager设置为全局

res://addons/dialogue_manager/dialogue_manager.gd路径下的脚本,需设置为全局;

在这里插入图片描述

(三)加载对话

我们在脚本中干三件事:1. 预加载对话气泡 2. 实例化对话气泡 3. 引用 .dialogue文本;
示例:

extends Node2D

const FLY_BOAT_BALLOON = preload("res://dialogue/fly_boat_balloon.tscn")

@onready var area_2d: Area2D = $Area2D
@onready var animated_sprite_2d: AnimatedSprite2D = $AnimatedSprite2D


func _ready() -> void:
	# 连接来自Area2D的信号
	area_2d.进入对话区.connect(开始对话)


# 当玩家进入对话区则触发对话
func 开始对话() ->void:
	# 创建一个对话气泡实例
	var 对话气泡: FlyBoatBalloon = FLY_BOAT_BALLOON.instantiate()
	# 添加对话气泡实例作为子节点
	get_parent().add_child(对话气泡)
	# 调用对话气泡脚本中的函数,开始对话(就是改名的那个脚本带的,还有其他的,可自行研究)
	对话气泡.start(load("res://dialogue/对话.dialogue"), "start")
	# 播放动画
	animated_sprite_2d.play("fly")

请添加图片描述

四、其他事项

  • 对话气泡的主题可在气泡场景中自定义,不都是黑框!
  • 脚本需要研究下才能上手!
  • 这个对话系统不能在ready中加载,已测试call_deferred无效,还是会报错,可能用计时器可以解决。
### Godot 4.4 版本信息、功能和更新内容 Godot 是一款开源的游戏引擎,其最新版本(截至当前时间)尚未达到正式发布的 4.4 版本。然而,基于社区开发者的讨论和技术预览版的功能推测,可以总结一些可能的改进方向以及已知的功能特性。 #### 1. MVC 架构支持 在 Godot 的项目开发中,MVC(模型-视图-控制器)架构被广泛应用于提高代码可维护性和模块化设计。例如,在 View 部分,开发者可以通过脚本绑定 UI 节点并提供界面更新方法[^1]: ```gdscript # MainView.gd extends Control @onready var text_edit: TextEdit = $TextEdit func ui_update(text: String): text_edit.text = text ``` 这种模式使得逻辑层与表现层分离,便于团队协作和后期维护。 #### 2. 场景资源加载优化 对于场景资源的动态加载,`preload()` 函数是一个常用工具。但如果路径错误,则可能导致程序报错。因此建议开发者仔细核对文件系统的实际路径设置[^2]: ```gdscript const SLOT_UI = preload("res://slot_ui.tscn") var instance = SLOT_UI.instantiate() add_child(instance) ``` 通过这种方式,能够有效减少因路径不匹配引发的问题。 #### 3. 建筑拖拽与旋转交互 为了增强用户体验,许多游戏需要实现物体的拖拽和自由旋转操作。这通常涉及监听用户的输入事件,并结合物理模拟来调整对象的位置及角度[^3]: ##### 主要步骤概述如下: - 创建必要的节点结构; - 编写 `main.gd` 和 `building.gd` 文件处理核心业务逻辑; - 导入外部素材作为视觉组件; - 定义特定的动作映射如 `left_click` 或者 `right_click` 来响应不同类型的用户行为。 以下是简单的拖放实现片段: ```gdscript # building.gd extends Node2D var is_dragging = false var start_pos = Vector2.ZERO func _input(event): if event is InputEventMouseButton and event.button_index == BUTTON_LEFT: if event.pressed: is_dragging = true start_pos = event.position - global_position elif is_dragging: is_dragging = false if event is InputEventMouseMotion and is_dragging: self.global_position = event.position - start_pos ``` #### 4. 自定义容器样式扩展 除了内置的标准控件外,还可以利用继承机制来自定义更复杂的布局管理器。比如模仿现代网页风格的设计方案——即所谓的“类网页布局容器”,它允许我们灵活控制页面背景色、纹理贴图以及其他装饰效果[^4]: ```gdscript # WebLikeContainer.gd @tool class_name WebLikeContainer extends HCenterContainer @export var bg_color := Color.WHITE setget set_bg_color @export var bg_image: Texture2D setget set_bg_image @export var bg_modulate := Color.WHITE setget set_bg_modulate func _draw(): var rect = get_rect() * get_global_transform() draw_rect(rect, bg_color) if bg_image != null: draw_texture_rect(bg_image, rect, false, bg_modulate) func set_bg_color(value): if value != bg_color: bg_color = value queue_redraw() func set_bg_image(value): if value != bg_image: bg_image = value queue_redraw() func set_bg_modulate(value): if value != bg_modulate: bg_modulate = value queue_redraw() ``` 以上代码展示了如何构建一个具有高级绘图能力的新类型容器。 --- ### 总结 综上所述,虽然官方文档还未完全公开关于 Godot Engine v4.4 所有细节改动清单,但从现有资料来看,该版本将继续围绕性能提升、API 改善以及新特性的引入展开工作。这些进步无疑将进一步巩固这款跨平台创作工具的地位。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ForBigData

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值