【Unity3D】场景切换、全屏_恢复切换、退出游戏、截屏
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)游戏对象

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】场景切换、退出全屏、退出游戏、截屏
【Unity3D】场景切换、全屏_恢复切换、退出游戏、截屏的更多相关文章
- Android长截屏-- ScrollView,ListView及RecyclerView截屏
http://blog.csdn.net/wbwjx/article/details/46674157 Android长截屏-- ScrollView,ListView及RecyclerV ...
- 团队软件开发_基于windows下截屏软件关于NABC框架的特点
经过我们小组数次的激烈讨论,就自己的能力和时间而言,我们小组的初步的计划是开发一款基于windows下的截图软件. 关于这个软件的功能,我们初步的想法如下: 1.能在windows下后台运行,有相应的 ...
- Android自己定义截屏功能,相似QQ截屏
由于公司业务需求 须要对一个屏幕进行截屏.但自带的截屏功能是远远不够项目的功能需求 ,我们是做一个画板软件 .须要的像QQ那样截屏之后 ,能够看到我们自己定义的工具.有画笔,button等等 .and ...
- Unity3d之如何截屏
Unity3d中有时有截屏的需求,那如何截屏呢,代码如下: /// <summary> /// 截屏 /// </summary> /// <param name=&qu ...
- 【玩转cocos2d-x之三十九】Cocos2d-x 3.0截屏功能集成
3.0的截屏和2.x的截屏基本上同样.都是利用RenderTexture来处理,在渲染之前调用call函数,然后调用Cocos的场景visit函数对其进行渲染,渲染结束后调用end函数就可以.仅仅是3 ...
- Snipaste强大离线/在线截屏软件的下载、安装和使用
步骤一: https://zh.snipaste.com/ ,去此官网下载. 步骤二:由于此是个绿色软件,直接解压即可. 步骤三:使用,见官网.ttps://zh.snipaste.com 按F1 ...
- Android8.1 MTK平台 截屏功能分析
前言 涉及到的源码有 frameworks\base\services\core\java\com\android\server\policy\PhoneWindowManager.java vend ...
- iOS检测用户截屏并获取所截图片
iOS检测用户截屏并获取所截图片 微信可以检测到用户截屏行为(Home + Power),并在稍后点击附加功能按钮时询问用户是否要发送刚才截屏的图片,这个用户体验非常好.在iOS7之前, 如果用户截屏 ...
- javascript实现当前页面截屏
javascript实现当前页面截屏 一.前言 有客户要求能对用户当前页面进行指定区域截屏,类似qq截屏的实现效果.比如用户在处理工作的时候,将当前页面录入后的一些信息进行截图下载保存.但又不能安装任 ...
- 截屏状态监听 - iOS
既接到电话状态监听的需求之后再次添加了截屏状态的监听,当使用 App 时若用户执行截屏操作需要对当前状态进行监听操作,下面有两种方法,其中可以替换截屏的图片内容(Plan A),也可以弹出提示框(Pl ...
随机推荐
- [STM32H7] 实战技能分享,如何让工程代码各种优化等级通吃,含MDK AC5,AC6,IAR和GCC
引出问题: 一个好的工程项目代码,特别是开源类的,如果能做到各种优化等级通吃,是一种非常好的工程案例,这样别人借鉴的时候,可以方便的适配到自己工程里.但实际项目中,针对一款产品代码,我们一般不会 ...
- 英语学习 : Get + 形容词 ( 表示由无到有的变化过程 )
I am happy . 表示事实 I got happy . 强调变化过程 get + 名词 : 得到 ...物或人 get + 形容词 : 变得 ...样
- Android生成SHA1(证书指纹)
去到jdk所在目录 C:\Program Files (x86)\Java\jdk1.8.0_73\bin 输入命令: keytool -list -v -keystore mykey.keystor ...
- MySQL高可用搭建方案之(MMM)
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top 注意:这篇转载文章,非原创 首发博客地址 原文地址 前言 MySQL的高可用 ...
- TLS简单理解
TLS简单理解 TLS的历史 From GTP3.5 TLS(传输层安全)是一种加密协议,旨在确保 Internet 通信的安全性和隐私保护.下面是 TLS 的历史概述: SSL(安全套接层):TLS ...
- [转帖]事务上的等待事件 —— enq: TM - contention
执行DML期间,为防止对与DML相关的对象进行修改,执行DML的进程必须对该表获得TM锁.若在获得TM锁的过程中发生争用,则等待enq: HW - contention 事件. SQL> sel ...
- [转帖]为什么不推荐使用/etc/fstab
https://www.jianshu.com/p/af49a5d0553f 对于工作中使用服务器的公司来讲,每到节假日来临时,总免不了对服务器进行下电.而收假回来的早上,则会有一个早上的时间会花费在 ...
- [转帖]Linux终端:用cat命令查看不可见字符
https://developer.aliyun.com/article/80607 printf 'testing\012\011\011testing\014\010\012more testin ...
- [转帖]云平台部署CNA、VRM手动安装方法
云平台部署CNA.VRM手动安装方法 分享人:郭道川 00443725 日期:2018.11.06 Ⅰ. 项目介绍 该项目主要为XX煤矿智能煤炭项目云平台部署交付,该项目所采用的服务器为RH2 ...
- Mark 一下 Redisson 可能需要升级版本
貌似有bug 我们高并发的情况下貌似遇到了 https://github.com/redisson/redisson/issues/2299