【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 ...
随机推荐
- 如何取消VSCODE文件夹折叠
1.问题 如图所示,文件夹折叠在一起,导致我无法在父文件夹中新建一个文件夹,而是只能在子文件夹中新建文件夹 2.解决 原因:文件夹以紧凑方式呈现,取消即可 1. 打开设置,在里面搜索Explorer: ...
- 【Altium Designer】五颜六色标识的PCB布板(增强PCB可视化特性)
出现上图中五颜六色的网络标识,对比各个网络会更加清晰,实现步骤如下 打开或关闭 View--->Net Color Override Active 快捷键 F5 设置 displa ...
- 【TouxhGFX】集成 之 《Using C code with TouchGFX》
在TouchGFX中使用C代码 您可能已经知道,TouchGFX是用C ++实现的,而TouchGFX API也是C ++.这意味着至少直接与UI相关的代码必须是C ++代码.但是,并不需要整个系统都 ...
- canal报错nosuchmethod ..bytebuffer
解决方法:更新jdk版本与es一致
- [转帖] TiDB 产品体系介绍
https://www.modb.pro/db/521269#:~:text=%E4%BC%81%E4%B8%9A%E7%89%88%E5%92%8C%E7%A4%BE%E5%8C%BA%E7%89% ...
- [转帖]Redhat、CentOS添加静态路由的方法
https://www.diewufeiyang.com/post/1174.html 我们经常遇到需要在系统默认路由的基础上,额外添加静态路由的需求.为了使得下次系统启动这些静态路由依旧生效,我们可 ...
- [转帖]dd - Linux世界中的搬运工
<存储工具系列文章>主要介绍存储相关的测试和调试工具,包括不限于dd.fio.vdbench.iozone.iometer.cosbench等性能负载工具,及strace等调试工具. dd ...
- linux使用脚本给文件的最后一行不换行的方式插入一句话
处理一下 sed -i '$s/$/&,xxxx.com/' /deploy/mailfailstart
- pytest-assume插件-多重校验
自动化接口测试我们通常会对一条case设置多条断言,这样就会出现一个问题,如果前面一 个校验不通过,那么后面的校验就不会走到,如下图,可以看到校验走到assert False就不往 下走了,这个时候p ...
- 记录TritonServer部署多模型到多GPU踩坑 | 京东云技术团队
一.问题是怎么发现的 部署chatglm2和llama2到一个4*V100的GPU机器上遇到问题 config.pbtxt 中设置模型分别在指定gpu上部署实例配置不生效 如以下配置为在gpu0上部署 ...