多语言展示
当前在线:480今日阅读:167今日分享:16

Unity 入门教程 之 游戏中暂停与恢复游戏设置

Unity 入门教程 之 游戏中暂停与恢复游戏设置。在游戏中设置游戏暂停,经常会想到 Time.timeScale = 0; 这种方法,但是 Time.timeScale 只是能暂停部分东西;如果在 update 函数中持续改变一个物体的位置,这种位置改变貌似是不会受到暂停影响的。把使用Time.timeScale = 0; 功能的函数写在 FixedUpdate() ,当使用 Time.timeScale = 0 时项目中所有 FixedUpdate() 将不被调用,以及所有与时间有关的函数。在 update 通过一个布尔值去控制暂停和恢复。
工具/原料
1

Unity

2

Time.timeScale

入门教程 之 游戏中暂停与恢复游戏设置
1

打开Unity,新建一个空工程,然后Unity界面如下图

2

在工程中新建一个脚本,脚本可以命名为“GameTest”,具体如下图

3

选中“GameTest”脚本,双击脚本或者右键“Open C# Project”,打开脚本,具体如下图

4

在打开的脚本“GameTest”进行编辑,首先设定初始变量,然后游戏开始时先暂停游戏,并设定按“Esc”暂停游戏,显示菜单,接着设定按UI“开始游戏”,显示运动物体,并且UI消失,最后完成开始函数、暂停函数的功能,使用Time.timeScale和暂停bool值变量,具体代码及代码说明如下图

5

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

6

脚本编译正确后,回到Unity,新建一个“GameObject”、“Cube”、“Capsule”物体,然后把脚本“GameTest”赋给“GameObject”,并把“Cube”、“Capsule”赋值给脚本对应值,具体如下图

7

运行场景,游戏开始显示UI,不显示运动物体,按按UI“开始游戏”,显示运动物体,并且UI消失,随后,按下“Esc”,物体暂停运动,UI显示,具体如下图

注意事项
1

当时用Time.timeScale并不会所有动作都暂停

2

功能的函数写在 FixedUpdate() ,当使用 Time.timeScale = 0 时项目中所有 FixedUpdate() 将不被调用,以及所有与时间有关的函数;在 update 通过一个布尔值去控制暂停和恢复

3

若帮到您,还请帮忙投票以帮助到更多的人;若有疑问,请留言

推荐信息