打开 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" 的功能,注意在实现过程中根据实际项目需求进行调整,例如添加权限管理、更改场景名称显示、实现特定场景场景预览等。