前言:
- 我是根据b站上的视频进行学习,并且总结写下笔记,然后做此分享。笔记非常详细以至于你可以通过查看文章进行快速学习并且制作出游戏出来。当然视频学习的链接我也放在下面了:
- 视频学习:https://www.bilibili.com/video/BV1Nd25BNEA6?spm_id_from=333.788.player.switch\&vd_source=078d5d025b9cb472d70d8fda1a7dc5a6\&p=15
- 音频/美术资源包下载: https://pan.baidu.com/s/1mY05SbG3XFUpn-qiKxDRhw?pwd=b6bg
完成目标:
成功实现"状态切换功能",并用UI实时显示当前状态进行调试。
一、实现状态切换逻辑
切换流程:
- 传入目标状态名称
- 通过名称获取对应子节点
- 判断是否获取成功
- 调用当前状态的
Exit() - 把
currentState赋值为新状态 - 调用新状态的
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,这里需要进行修改

- 然后当我们启动游戏,就可以发现我们的调试标签名字根据我们按下空格键进行变动了

- 然后就将我们的切换函数测试完成了,就可以把那个根据按下空格键将其变化的代码给删掉