新版Unity 3D如何实现点击按钮跳转场景功能?
打开 Unity,新建一个场景并使用 NGUI(Neural Graphics UI)创建一个按钮,选择 NGUI,并将其拖拽至场景中的合适位置,例如在屏幕中心或在其旁边,为了简化操作,您还可以直接使用 Ugui 来创建按钮组件。
-
点击右上角的 "File - Save Scenes" 键以保存场景名称为 "sceneOne"。

-
在场景命名处双击 "sceneTwo" 以创建一个新的场景,这会与之前创建的 "sceneOne" 相同,包括保存名为 "sceneTwo" 的新场景。
-
创建新的图像元素,如一个标题文本标签或文本UI,用于显示和演示场景切换,命名该元素为 "sceneTwoTitle" 或 "sceneTwoText",并将其放置在相应场景的位置,创建一个新的资产文件夹并命名 "Assets",在这个目录下,新建一个名为 "test" 的 C# 脚本,将其粘贴到以 ".cpp" 格式的文件夹中,如 "Assets/test.cpp"。
-
引入 Unity 内置模块
SceneManager并加载 "sceneTwo" 想象场景,编写如下代码:
using UnityEngine.SceneManagement;
public class TestSceneController : MonoBehaviour
{
private Scene sceneOne;
private string sceneTwoTitle = "sceneTwo";
private string sceneTwoText = "New Scene: sceneTwo";
void Start()
{
// 加载 "sceneTwo"
sceneOne = SceneManager.LoadScene(sceneTwo);
// 初始化按钮控制器对象
GameObject button = Instantiate(gameObject);
button.GetComponent<Button>().onClick.AddListener(LoadNextScene);
// 显示场景切换消息
Debug.Log($"Scene: {sceneOne.name}");
Debug.Log($"Title: {sceneTwoTitle}");
Debug.Log($"Text: {sceneTwoText}");
}
private void LoadNextScene()
{
// 当当前场景为 "sceneTwo" 时,切换到 "sceneTwo" 重新加载场景
if (sceneOne == sceneTwo)
SceneManager.LoadScene("sceneTwo");
else
SceneManager.LoadScene("sceneOne");
}
}
-
将上述代码存放在控制器所在的游戏文件夹下的 " Assets / test.cs" 文件中,并通过 Inspector 设置类的属性(场景名称、标题文本以及切换场景的回调方法),注意调整代码中的场景名称以适应你的 Unity 版本和实际项目需求。

-
将脚本添加到场景按钮上方,确保按钮可用并触发正确的动画效果,替换原控制流中逻辑部分为设置按钮激活时执行的代码(在按下按钮时触发
LoadNextScene()方法)。编辑: Note:
- 由于在 .cpp 文件中启用及使用
Override OnClick.AddListener()方法可能引入额外的依赖,因此在此步骤仅提供示例代码作为参考。
原代码中的
This.gameObject.AddComponent<Button>()改为button.AddComponent<Button>(),以遵循 Unity 开发者指南要求,利用GetComponent<Button>()函数找到对应Button组件实例,调用其onClick.AddListener()方法即可在按钮被点击时执行相应逻辑。修改后的示例代码如下:

- 由于在 .cpp 文件中启用及使用
using UnityEngine;
using UnityEngine.UI;
public class TestSceneController : MonoBehaviour
{
public Scene sceneOne;
public string sceneTwoTitle = "sceneTwo";
public string sceneTwoText = "New Scene: sceneTwo";
private Button button;
private Image buttonText;
private Image stageBackgroundImage;
// 控制场景切换
private void Awake()
{
// 添加 Button 组件和舞台背景图像组件
button = GetComponent<Button>();
buttonText = GetComponent<Image>();
// 调用指定的槽函数(在按钮上触发加载事件)
button.onClick.AddListener(LoadNextScene);
}
// 当页面切换时,自动加载 "sceneTwo" 场景并更新 Button 图片和 "sceneTwo Title" 和 "sceneTwo Text" 标签
private void LoadNextScene()
{
// 判断当前场景是否为 "sceneTwo"
if (sceneOne == sceneTwo)
LoadScene("sceneTwo");
// 更新 Button 图片
buttonText.text = sceneTwoText;
stageBackgroundImage.image = "assets/images/new_scene_background.png";
}
private void Update()
{
// 移除原本已存在的 Scene、Button 和 Title 标签
Destroy(buttonText);
Destroy(sceneOne);
Destroy(sceneTwo);
// 实现按钮激活时的切换场景逻辑
if (sceneOne != null && CurrentScene == sceneOne)
SceneManager.LoadScene("sceneTwo");
else
SceneManager.LoadScene("sceneOne");
}
}
代码实现了通过按钮触发在切换场景时加载 "sceneTwo" 的功能,注意在实现过程中根据实际项目需求进行调整,例如添加权限管理、更改场景名称显示、实现特定场景场景预览等。
