关于Unity游戏开发场景切换:Time.timeScale的捣乱

在制作场景切换功能的时候,我用的是SceneManager.LoadScene函数,从主界面场景切换到关卡1场景,从关卡1场景切换到关卡2场景都是没有问题的。

但是,当我在点击Pause按钮来到暂停界面,点击Back Menu按钮准备回到主界面场景时,只显示了一片空白,场景没有被完全加载。

我的代码是这样的:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.Audio;

public class Mainmenu : MonoBehaviour
{
    public GameObject pasue, resume;
    public AudioMixer audioMixer;
    public void BackMainMenu()
    {
        SceneManager.LoadScene(0);
    }
   public void PlayGame()
    {
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
    }
    public void QuitGame()
    {
        Application.Quit();
    }
    public void UIEnabled()
    {
        GameObject.Find("Canvas/Mainmenu/UI").SetActive(true);
    }
    public void Pasue()
    {
        resume.SetActive(true);
        Time.timeScale = 0f;
    }
    public void Resume()
    {
        resume.SetActive(false);
        Time.timeScale = 1f;
    }
    public void Volume(float value)
    {
        audioMixer.SetFloat("MainVolume", value);
    }
}

关于Unity游戏开发场景切换:Time.timeScale的捣乱_第1张图片

我尝试在代码中寻找问题,一开始去官方手册寻找SceneManager.LoadScene方法,找到一个与它相像的方法:SceneManager.LoadSceneAsync(异步加载)。

关于Unity游戏开发场景切换:Time.timeScale的捣乱_第2张图片

 在LoadScene描述中:使用此方法,不会立即加载场景,而是在下一帧加载。这种半异步的行为可能会导致卡顿,并可能令人困惑,因为加载无法立即完成。

因为这一句话,我猜想是不是就是这个原因呢?因为我的画面就是停止卡住一样,会不会是没有加载完呢?

但是我的游戏只有一点点内容,完全不是很大的场景,这样问题是不会出现的吧。但是信可有而不以为无。我在另一个游戏制作中使用了异步场景加载,让我对异步加载有了一点了解。我发现异步加载只是一种加载场景的方式,这种方式是为了不让玩家无聊而使用。就是游戏的加载场景,不让玩家以为自己的手机卡死了。所以一切又回到了原点。

后来询问了我的一个游戏开发的学长,他就很快解决了我的疑问。

我会出现场景返回卡住一样的情况,是由于我改变了游戏的时间,让游戏“静止”了。

关于Unity游戏开发场景切换:Time.timeScale的捣乱_第3张图片

 当我在进行游戏的时候点击Pause来到暂停界面,此时我的timeScale让游戏时间的流逝变为了0,静止不动达到暂停游戏的效果。

Time.timeScale官方描述如下:

关于Unity游戏开发场景切换:Time.timeScale的捣乱_第4张图片

 timeScale的改变会影响全局,会影响粒子、动画等与帧率相关的。当我让timeScale变为0后,单击返回主菜单按钮,我的动画就被静止了,一直停在第一帧而不会继续进行下去,如果要改变此问题,只要在点击按钮的事件函数了将timeScale的的值改回1,就解决了返回场景卡住的情况

你可能感兴趣的:(unity,学习,游戏)