前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Unity2D开发入门-场景切换

Unity2D开发入门-场景切换

作者头像
码客说
发布2023-07-24 15:43:27
1.6K0
发布2023-07-24 15:43:27
举报
文章被收录于专栏:码客

前言

场景切换

在Unity中,场景切换可以通过以下几种方式完成:

使用代码进行场景切换:在脚本中使用SceneManager类来加载和卸载场景。

可以使用SceneManager.LoadScene("场景名称")来加载新场景,使用SceneManager.UnloadScene("场景名称")来卸载当前场景。

示例代码如下:

代码语言:javascript
复制
using UnityEngine;
using UnityEngine.SceneManagement;

public class SceneSwitcher : MonoBehaviour
{
    public void SwitchScene(string sceneName)
    {
        SceneManager.LoadScene(sceneName);
    }
}

可以将以上代码添加到一个游戏对象上,然后在其他脚本中调用SwitchScene方法来切换场景。

使用Unity的场景管理器:在Unity编辑器中,可以使用场景管理器来直接切换场景。打开菜单栏的”Window”,选择”Scene Management”,然后选择需要切换的场景即可。

切换场景不销毁

在Unity中切换场景时,默认情况下,前一个场景是会被销毁的。

当你加载一个新场景时,Unity会自动卸载前一个场景,释放相关的资源。

然而,你也可以选择在切换场景时保留前一个场景。

这个功能可以通过设置LoadSceneMode参数为LoadSceneMode.Additive来实现。这样做可以让前一个场景保持加载状态,并在新场景加载之上展示。

示例代码如下:

代码语言:javascript
复制
using UnityEngine;
using UnityEngine.SceneManagement;

public class SceneSwitcher : MonoBehaviour
{
    public void SwitchScene(string sceneName)
    {
        SceneManager.LoadScene(sceneName, LoadSceneMode.Additive);
    }
}

在上述示例中,当切换到新场景时,前一个场景将保留在加载状态,并且新场景将以前一个场景的上层进行展示。

这意味着你可以在多个场景之间进行切换,而不会销毁之前的场景。

需要注意的是,如果你选择保留前一个场景,请确保在适当的时候手动卸载场景,以释放资源并避免内存泄漏。

总之,你可以根据具体需求选择是否销毁前一个场景来达到所需的场景切换效果。

代码语言:javascript
复制
using UnityEngine;
using UnityEngine.SceneManagement;

public class SceneManager : MonoBehaviour
{
    public void LoadScene(string sceneName)
    {
        SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);
    }

    public void UnloadScene(string sceneName)
    {
        SceneManager.UnloadSceneAsync(sceneName);
    }

    // 切换当前活动场景
    public void SwitchScene(string sceneName)
    {
        // 先加载新场景
        SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);
        // 卸载当前场景
        SceneManager.UnloadSceneAsync(SceneManager.GetActiveScene());
    }
}

开始场景

常见的场景比如

  • 开始菜单场景
  • 人物选择场景
  • 游戏场景

但是我们的背景声音或者音效,我们不想每个场景都加载,这时候我们可以让场景不销毁。

这样背景声音和音效就可以全局使用了。

File => Build Settings 中要把我们的场景都拖进来

image-20230723192703236
image-20230723192703236

开始场景控制器

代码语言:javascript
复制
using UnityEngine;
using UnityEngine.SceneManagement;

public class GameStart : MonoBehaviour
{
    private void Awake()
    {
        DontDestroyOnLoad(this);
        SceneManager.LoadScene("Menu");
    }

    [RuntimeInitializeOnLoadMethod]
    public static void OnGameLoad()
    {
        if (SceneManager.GetActiveScene().name == "GameStart")
        {
            return;
        }

        SceneManager.LoadScene("GameStart");
    }
}

其中下面代码保证不销毁

代码语言:javascript
复制
DontDestroyOnLoad(this);

[RuntimeInitializeOnLoadMethod]修饰的方法可以保证起始的场景永远是GameStart,从而即使直接从其他场景启动也会从入口场景启动。

退出游戏

代码语言:javascript
复制
#if UNITY_EDITOR
EditorApplication.isPlaying = false;
#else
Application.Quit();
#endif
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 场景切换
  • 切换场景不销毁
  • 开始场景
  • 退出游戏
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档