当前位置: 首页 > news >正文

Godot-C#场景之间的切换

简介

在整个游戏工程中,存在n个游戏场景,经常需要对场景进行切换,比如进出房门、进入副本等。下面介绍下在Godot中实现场景切换的方法。

前置操作

创建多个场景

  1. 在Godot左下角的资源浏览器中,点击“新建”按钮,然后选择“场景”类型,创建新的场景文件,并设置一个主场景img
  2. 给场景添加标识物,方便区分不同场景。在下面例子中,我在scene_fst中,仅仅添加了一个名为SwitchScene的Node节点,然后绑定一个脚本,等下用来写切换场景的逻辑img
  3. 在scene_snd中添加一两个Sprite2D节点,然后吧项目默认的godot图标拖到这个Sprite2D节点上,如图所示img

经过上面的操作,我们得到了一个空的场景一:scene_fst,一个带有标识物的场景二:scene_snd,下面演示如何实现场景切换。注意:本文中配置了虚拟按键,如果未配置,请参考之前的文章进行配置。

切换到场景文件

  1. 每个场景都有场景树,场景树所对应的类就是:SceneTree。切换场景的操作,就是在场景树中加载不同的场景文件。
  2. SceneTree的ChangeSceneToFile方法可以实现加载指定的场景文件,从而实现场景切换。

下面的代码中,我们在输入事件中监听了一个虚拟按键,当按下这个按键时,切换到scene_snd场景。

using Godot;
using System;public partial class SwitchScene : Node2D
{// Called when the node enters the scene tree for the first time.public override void _Ready(){}// Called every frame. 'delta' is the elapsed time since the previous frame.public override void _Process(double delta){}public override void _Input(InputEvent @event){// 在输入监听方法中,监听一个虚拟按键,触发场景切换if (Input.IsActionJustPressed("Left")){// 首先获取当前场景树SceneTree tree = GetTree();// 1)跳转到scene_snd.tscn场景tree.ChangeSceneToFile("res://scene_snd.tscn");			}}
}

配置场景变量

一般来说,像路径这种可能发生变化的值,如果要在代码中用到的话,最好写在一个统一的地方,方便管理。上面我们说到场景树的类是:SceneTree,它属于场景,那场景也同样对应一个类:PackedScene。在类中需要创建一个可供切换的静态场景变量,比如:

场景一:

定义一个PackedScene类型的变量,直接加载指定的场景文件

public static PackedScene scene_snd = GD.Load<PackedScene>("res://scene_snd.tscn");

在切换场景时,直接调用ChangeSceneToPacked方法:

using Godot;
using System;public partial class SwitchScene : Node2D
{// 定义一个场景变量public static PackedScene scene_snd = (PackedScene)ResourceLoader.Load("res://scene_snd.tscn");public override void _Ready(){}public override void _Process(double delta){}public override void _Input(InputEvent @event){if (Input.IsActionJustPressed("Left")){// 首先获取当前场景树SceneTree tree = GetTree();	tree.ChangeSceneToPacked(scene_snd);	}}
}

场景二:

定义一个PackedScene类型的变量,不显示的去定义这个场景,但是需要在godot的项目设置中,将这个场景文件绑定到这个变量上。

  1. 首先在代码中声明场景变量,保存。
// 每一个场景都需要单独Export
[Export]
public PackedScene scene_snd;
[Export]
public PackedScene scene_trd;
  1. 切换到godot,重新编译
    img
  2. 双击第一个场景,可以看到右侧属性面板中,出现了新的变量,就是脚本中设置的scene_snd变量。
    img
  3. 将scene_snd.tscn文件拖到scene_snd变量上,保存。
    img

完整代码如下:

using Godot;
using System;public partial class SwitchScene : Node2D
{// 导出场景变量[Export]public PackedScene scene_snd;public override void _Ready(){}public override void _Process(double delta){}public override void _Input(InputEvent @event){if (Input.IsActionJustPressed("Left")){// 首先获取当前场景树SceneTree tree = GetTree();tree.ChangeSceneToPacked(scene_snd);	}}
}

总结

通过上面的介绍,我们可以看到,在Godot中实现场景切换的方法有两种,一种是通过场景树的ChangeSceneToFile方法,另一种是通过场景树的ChangeSceneToPacked方法。前者通过文件路径切换场景,后者通过场景变量切换场景。通过场景变量,可以实现在代码中直接调用场景,而不需要在代码中写死场景路径。

http://www.hskmm.com/?act=detail&tid=34491

相关文章:

  • 读书日记1
  • 【ARM CoreLink 系列 3.1 -- CCI-500 详细介绍 -上半部】
  • 央企程序员AI创业一个月感受 ✨
  • tryhackme-预安全-网络基础知识-局域网介绍-05
  • 10.19
  • 从众多知识汲取一星半点也能受益匪浅【day16(2025.10.18)】(加班但只加到四点半)
  • (个人思考)游戏技能的实现
  • 模拟赛T4 分析
  • ubuntu系统中containerd的cni网络配置
  • 十月阅读笔记
  • #20232408 2025-2026-1 《网络与系统攻防技术》实验二实验报告 - 20232408
  • 题解:P2672 [NOIP 2015 普及组] 推销员
  • 一文读懂Schnorr签名
  • 如何选择合适的SAP实施公司?3步锁定靠谱的SAP服务商
  • CSP-S2024
  • 10/19
  • 论DCT和IDCT的重要性,汇编SIMD版第一,此贴第二,就是这么狂 :-)
  • 这些SAP实施公司哪家强?国内比较好的SAP实施商推荐
  • 25秋周总结5
  • UML图
  • 博士研究文档管理技术指南
  • 题解:P12128 [蓝桥杯 2024 省 B 第二场] 质数变革
  • 题解:P12003 在小小的奶龙山里面挖呀挖呀挖(加强版)
  • apisix升级完整流程
  • 10.11-10.18 一周总结
  • 10/19/2025 一周总结
  • 如何生成逼真的合成表格数据:独立采样与关联建模方法对比
  • winform+Task+async
  • AI元人文:跨学科视野下的人工智能伦理新范式
  • Rust 开发最佳实践(Rustlang Best Practices)