godot2D游戏教程系列二(17)

前言:

完成目标:

成功实现"状态切换功能",并用UI实时显示当前状态进行调试。


一、实现状态切换逻辑

切换流程:

  1. 传入目标状态名称
  2. 通过名称获取对应子节点
  3. 判断是否获取成功
  4. 调用当前状态的 Exit()
  5. currentState 赋值为新状态
  6. 调用新状态的 Enter()

效果:

状态可以安全、完整地进行切换。


二、添加调试UI

  • 给 Player 添加 Label 节点
  • 设置 z_index = 100(保证显示在最上层)
  • 调整缩放大小
  • 移动到角色旁边
  • 重命名为 DebugLabel

作用:

用于显示当前状态名称。


三、让状态显示在UI上

  • 在状态机脚本中引用 DebugLabel
  • 在状态脚本的更新函数中修改 Label.text

效果:

状态变化时,文字同步变化。


四、测试状态切换

  • 添加临时代码:按下空格切换到 Run
  • 修正函数名错误(必须使用 _process
  • 运行游戏测试成功

最后删除测试代码。


最终效果

  • 状态可以通过函数正确切换
  • 每次切换都会:
  • 退出旧状态
  • 进入新状态
  • UI 实时显示当前状态

状态机从"框架"升级为"可运行、可调试"的完整系统。

实现过程:

  • 先进行传入参数目标状态的名称进行切换,然后获取这个节点,另外进行判断这个节点是否获取到了,获取到了之后进行退出当前状态进行清理,然后将当前状态赋值为新的状态,然后进入这个新的状态
  • 做godot系统的ui系统,我们右键点击玩家节点,给它添加一个新的节点,是标签节点就是文本节点
  • 然后我们将这个UI进行置顶,设置z-index为100,这样子文字就会显示在游戏所有元素的上方
  • 我们点击右侧检测器的layout里面的transform里面的scale缩放属性进行调整这个文字的缩放大小
  • 然后我们将文字移动到角色的旁边之后启动一下游戏,在游戏中就可以看到我们的这个文字显示了
  • 然后我们重命名一下这个标签节点,这个节点重命名为DebugLabel
  • 然后回到我们状态机脚本,按住Ctrl键将调试标签拖入脚本中
  • 然后我们切换到状态脚本中,在更新函数中我们进行修改标签节点的文本
  • 然后我们添加一些代码,让玩家按下空格就可以切换到奔跑状态,另外这里笔者有一个小问题失误就是这个函数名字敲错了,应该是_process而不是_physics,这里需要进行修改
  • 然后当我们启动游戏,就可以发现我们的调试标签名字根据我们按下空格键进行变动了
  • 然后就将我们的切换函数测试完成了,就可以把那个根据按下空格键将其变化的代码给删掉
相关推荐
林川~019 小时前
Unity 万能物理检测工具:射线检测 / 范围检测 / 层级过滤 / 编辑器可视化(可直接拿去用)
游戏·unity·c#·射线检测·通用工具
智者知已应修善业10 小时前
【4060BD_5V应用电路图】2022-12-24
驱动开发·经验分享·笔记·硬件架构·硬件工程
小弥儿11 小时前
GitHub今日热榜 | 2026-09-18:腾讯双项目上榜
学习·开源
知识分享小能手13 小时前
深度学习学习教程,从入门到精通,深度生成模型 —— 知识点详解与代码实现(20)
人工智能·深度学习·学习
m4Rk_13 小时前
【论文阅读】Agent 记忆机制(74):CompassMem——从相似度检索走向事件图上的记忆导航
论文阅读·人工智能·学习·开源·github
小李不想当小白13 小时前
DMA直接存储器存取(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·分享
2601_9499506315 小时前
练题簿在线练题全流程:从资料导入到模拟考试与错题复盘
学习·考研·小程序·刷题·小程序推荐
2601_9653842615 小时前
口腔黏膜清洁的工程化路径:从表面形貌表征到清洁策略匹配
经验分享·笔记
泡泡鱼(敲代码中)15 小时前
Python 容器类型学习笔记:列表、元组、字典、集合
开发语言·笔记·python·pycharm
别动我齐刘海15 小时前
ROS2 Jazzy + C++ 实战路线——基础学习2
c++·人工智能·vscode·python·学习·机器学习·机器人