Unity
Time.timeScale
打开Unity,新建一个空工程,然后Unity界面如下图
在工程中新建一个脚本,脚本可以命名为“GameTest”,具体如下图
选中“GameTest”脚本,双击脚本或者右键“Open C# Project”,打开脚本,具体如下图
在打开的脚本“GameTest”进行编辑,首先设定初始变量,然后游戏开始时先暂停游戏,并设定按“Esc”暂停游戏,显示菜单,接着设定按UI“开始游戏”,显示运动物体,并且UI消失,最后完成开始函数、暂停函数的功能,使用Time.timeScale和暂停bool值变量,具体代码及代码说明如下图
“GameTest.cs”脚本内容如下:using UnityEngine;public class GameTest : MonoBehaviour { public bool IsGamePaused; public GameObject cubeGo; public GameObject capsuleGo; void Start() { PauseGame(); cubeGo.SetActive(false); capsuleGo.SetActive(false); } void Update() { if (Input.GetKey(KeyCode.Escape)) { PauseGame(); } if (!IsGamePaused) { capsuleGo.transform.Rotate(Vector3.forward * 60); } } private void FixedUpdate() { cubeGo.transform.Rotate(Vector3.up * 60); } void OnGUI() { if (!IsGamePaused) return; ///自动布局,按照区域 GUILayout.BeginArea(new Rect((Screen.width - 100) / 2, (Screen.height - 200) / 2, 100, 200)); ///横向 GUILayout.BeginVertical(); if (IsGamePaused) { if (GUILayout.Button('开始游戏', GUILayout.Height(50))) { StartGame(); } } if (GUILayout.Button('退出游戏', GUILayout.Height(50))) { Application.Quit(); } GUILayout.Button('关于游戏', GUILayout.Height(50)); GUILayout.EndVertical(); GUILayout.EndArea(); } void StartGame() { IsGamePaused = false; Time.timeScale = 1; cubeGo.SetActive(true); capsuleGo.SetActive(true); } void PauseGame() { IsGamePaused = true; Time.timeScale = 0; }}
脚本编译正确后,回到Unity,新建一个“GameObject”、“Cube”、“Capsule”物体,然后把脚本“GameTest”赋给“GameObject”,并把“Cube”、“Capsule”赋值给脚本对应值,具体如下图
运行场景,游戏开始显示UI,不显示运动物体,按按UI“开始游戏”,显示运动物体,并且UI消失,随后,按下“Esc”,物体暂停运动,UI显示,具体如下图
当时用Time.timeScale并不会所有动作都暂停
功能的函数写在 FixedUpdate() ,当使用 Time.timeScale = 0 时项目中所有 FixedUpdate() 将不被调用,以及所有与时间有关的函数;在 update 通过一个布尔值去控制暂停和恢复
若帮到您,还请帮忙投票以帮助到更多的人;若有疑问,请留言