美文网首页Unity3D
【Unity3D】场景切换、全屏/恢复切换、退出游戏、截屏

【Unity3D】场景切换、全屏/恢复切换、退出游戏、截屏

作者: LittleFatSheep | 来源:发表于2023-02-25 11:57 被阅读0次

1 前言

1)场景切换

场景切换可以使用 SceneManager 的 LoadScene 和 LoadSceneAsync 方法,如下:

public static void LoadScene(string sceneName)
public static void LoadScene(int sceneBuildIndex)
public static AsyncOperation LoadSceneAsync(string sceneName)
public static AsyncOperation LoadSceneAsync(int sceneBuildIndex)

切换场景会默认销毁当前场景中的所有游戏对象,若不想销毁某对象,可以调用 MonoBehaviour 的 DontDestroyOnLoad 方法,如下:

DontDestroyOnLoad(gameObject);

2)全屏 / 恢复切换

全屏 / 恢复切换,可以使用 Screen.SetResolution 接口,如下:

using System.Runtime.InteropServices;
using UnityEngine;
 
public class WindowController : MonoBehaviour {
    [DllImport("user32.dll", SetLastError = true)]
    private static extern int GetSystemMetrics(int nIndex);
    private const int SM_CXSCREEN = 0; // 主屏幕分辨率宽度
    private const int SM_CYSCREEN = 1; // 主屏幕分辨率高度
    private const int SM_CYCAPTION = 4; // 标题栏高度
    private const int SM_CXFULLSCREEN = 16; // 最大化窗口宽度(减去任务栏)
    private const int SM_CYFULLSCREEN = 17; // 最大化窗口高度(减去任务栏)
    private const float INIT_WINDOW_RATE = 0.8f; // 初始窗口比例
    private int screenWidth; // 屏幕宽度
    private int screenHeight; // 屏幕高度
    private int windowWidth; // 窗口宽度
    private int windowHeight; // 窗口高度
 
    private void Awake() {
        screenWidth = GetSystemMetrics(SM_CXSCREEN);
        screenHeight = GetSystemMetrics(SM_CYSCREEN);
        windowWidth = (int) (screenWidth * INIT_WINDOW_RATE);
        windowHeight = (int)(screenHeight * INIT_WINDOW_RATE);
    }
 
    private void Update() {
        if (Input.GetKeyDown(KeyCode.Escape)) {
            if (!Screen.fullScreen) {
                windowWidth = Screen.width;
                windowHeight = Screen.height;
                Screen.SetResolution(screenWidth, screenHeight, true);
            } else {
                Screen.SetResolution(windowWidth, windowHeight, false);
            }
        }
    }
}

说明:在打包应用时,需要在 Player Settings 窗口勾选 Resizable Window 选项,如下:

3)退出游戏

退出游戏可以使用 Application 的 Quit 方法,支持后台运行(默认不支持)可以使用 Application 的 runInBackground 属性,如下:

if (Input.GetKeyDown(KeyCode.Q)) {
    Application.Quit(); //退出游戏
}
// 设置支持后台运行
Application.runInBackground = true;

4)截屏

ScreenCapture.CaptureScreenshot("Assets/Screenshot.png");

2 应用

2.1 场景一

1)游戏对象

2)游戏界面

3)脚本组件

SceneController1.cs

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class SceneController1 : MonoBehaviour {
    private bool fullScreen = true;

    private void Start () {
        Button jumpBtn = transform.GetComponent<Button>();
        jumpBtn.onClick.AddListener(OnClickJump);
    }

    private void Update() {
        if (Input.GetKeyDown(KeyCode.Escape)) { // 全屏与恢复
            fullScreen = !fullScreen;
            Screen.fullScreen = fullScreen;
        }
        if (Input.GetKeyDown(KeyCode.Q)) { // 退出游戏
            Application.Quit();
        }
    }

    private void OnClickJump() { // 切换场景
        SceneManager.LoadScene("Scene2");
        // SceneManager.LoadSceneAsync("Scene2");
    }
}

说明: SceneController1 脚本组件挂在 Button 控件上。

2.2 场景二

1)游戏对象

2)游戏界面

3)脚本组件

SceneController2.cs

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class SceneController2 : MonoBehaviour {
    private bool fullScreen  = true;

    private void Start () {
        Button jumpBtn = transform.GetComponent<Button>();
        jumpBtn.onClick.AddListener(OnClickJump);
    }

    private void Update() {
        if (Input.GetKeyDown(KeyCode.Escape)) { // 全屏与恢复
            fullScreen = !fullScreen;
            Screen.fullScreen = fullScreen;
        }
        if (Input.GetKeyDown(KeyCode.Q)) { // 退出游戏
            Application.Quit();
        }
    }

    private void OnClickJump() { // 切换场景
        SceneManager.LoadScene("Scene1");
        // SceneManager.LoadSceneAsync("Scene1");
    }
}

说明: SceneController2 脚本组件挂在 Button 控件上。

2.3 场景切换

依次选择【File→Build Settings】(或按 Ctrl + Shift + B 快捷键),将 Scene1 和 Scene2 拖拽到 Scenes In Build 框中,如下:

运行效果如下:

声明:本文转自【Unity3D】场景切换、退出全屏、退出游戏、截屏

相关文章

  • Xcode有关简单快捷方式

    command +shfit+3 全屏截屏 command +shfit+4 区域截屏 应用程序的切换 comma...

  • 全屏切换,退出全屏

    代码部分:首先在created中监听窗口切换事件和键盘按下事件,在组件销毁之前移除监听: 判断是否是全屏: 全局监...

  • JS 全屏和退出全屏

    进入全屏 退出全屏 获取当前全屏的节点 判断当前是否全屏 判断当前文档是否能切换到全屏 全屏事件 注:1.docu...

  • 树莓派截屏

    1.安装截屏软件 使用scrot可以截屏 sudo apt-get install scrot 2.截屏 切换到保...

  • 点击切换全屏和退出全屏

  • Android监听横竖屏切换

    偶然在项目中用到播放视频时,需要横屏将视频全屏播放,所以需要监听屏幕的横竖屏切换事件。 横竖屏切换监听效果: Co...

  • 横竖屏切换隐藏显示虚拟导航栏

    有视频播放需求,切换横竖屏,一般都是从默认竖屏切换横屏。除了设置全屏外 虚拟导航栏也需要隐藏,问题就出在隐藏后回到...

  • Unity场景切换

    场景切换在游戏中很常见。 切换其他场景比如点击start按钮后开始游戏。代码如下: 这里的场景名start_gam...

  • showdoc快捷键大全

    F9切换实时预览Switch watch/unwatch F10全屏HTML预览(按 Shift + ESC 退出...

  • Android Opencv 4.2 摄像头二次开发之 横竖屏切

    Android Opencv 4.2 摄像头二次开发之 横竖屏切换,前后摄像头切换,铺满全屏问题,相机无法启动问题...

网友评论

    本文标题:【Unity3D】场景切换、全屏/恢复切换、退出游戏、截屏

    本文链接:https://www.haomeiwen.com/subject/sbpohdtx.html