首页 > 其他分享 >【Unity3D】场景切换、全屏_恢复切换、退出游戏、截屏

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

时间:2023-03-20 21:00:19浏览次数:61  
标签:Unity3D 场景 fullScreen int void private 截屏 切换

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);
            }
        }
    }
}

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)游戏对象

img

2)游戏界面

img

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)游戏对象

img

2)游戏界面

img

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 框中,如下:

img

​ 运行效果如下:

img

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

标签:Unity3D,场景,fullScreen,int,void,private,截屏,切换
From: https://www.cnblogs.com/zhyan8/p/17234918.html

相关文章

  • 【Unity3D】GUI控件
    1前言​Unity3D提供了GUI、NGUI、UGUI等图形系统,以增强玩家与游戏的交互性。GUI在编译时不能可视化,在运行时才能可视化。GUI代码需要在OnGUI函数中调用才能......
  • 【Unity3D】相机跟随
    1前言​相机跟随是相机指始终跟随特定游戏对象,有以下2种跟随效果:位置跟随:相机指向目标游戏对象的向量始终不变位置和姿态跟随:相机在目标游戏对象的坐标系下的坐......
  • 【Unity3D】UGUI之Text
    1Text简介​UGUI概述中介绍了Canvas渲染模式、RectTransform组件、锚点(Anchor)等,本文将介绍UGUI中的Text控件。​在Hierarchy窗口右键,选择UI列表里......
  • 【Unity3D】UGUI概述
    1UGUI与GUI区别​GUI控件在编译时不能可视化,并且界面不太美观,在实际应用中使用的较少。UGUI在编译时可视化,界面美观,实际应用较广泛。2Canvas渲染模式(Render......
  • 【Unity3D】UGUI之Button
    1Button属性面板​在Hierarchy窗口右键,选择UI列表里的Button控件,即可创建Button控件,选中创建的Button控件,按键盘【T】键,可以调整Button控件的大小和位置......
  • 【Unity3D】UGUI之Image和RawImage
    1纹理(Texture)​Image控件和RawImage控件都是承载渲染图片的控件,都需要指定一个纹理(Texture)图片。在Assets窗口选中一张图片,在Inspector窗口的参数设置面板可......
  • 【Unity3D】UGUI之Slider
    1Slider属性面板​在Hierarchy窗口右键,选择UI列表里的Slider控件,即可创建Slider控件,选中创建的Slider控件,按键盘【T】键,可以调整Slider控件的大小和位置......
  • 【Unity3D】UGUI之Toggle
    1Toggle属性面板​在Hierarchy窗口右键,选择UI列表里的Toggle控件,即可创建Toggle控件,选中创建的Toggle控件,按键盘【T】键,可以调整Toggle控件的大小和位置......
  • 字符动态切换效果
    #include<Windows.h>#include<stdlib.h>#include<vector>#include<thread>#include<mutex>usingnamespacestd;structSDisplay{ int Width; int He......
  • 超简单的Matlab2022b软件切换中/英文界面方法教程(附软件下载)
    在中文Windows操作系统中,MATLAB2015b之后版本安装默认为中文版,但有部分用户还是习惯使用英文界面下的MATLAB(个人偏好),下面以R2022b版分享一下中/英文界面的切换方法,超简单。......