在制作场景切换功能的时候,我用的是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);
}
}
我尝试在代码中寻找问题,一开始去官方手册寻找SceneManager.LoadScene方法,找到一个与它相像的方法:SceneManager.LoadSceneAsync(异步加载)。
在LoadScene描述中:使用此方法,不会立即加载场景,而是在下一帧加载。这种半异步的行为可能会导致卡顿,并可能令人困惑,因为加载无法立即完成。
因为这一句话,我猜想是不是就是这个原因呢?因为我的画面就是停止卡住一样,会不会是没有加载完呢?
但是我的游戏只有一点点内容,完全不是很大的场景,这样问题是不会出现的吧。但是信可有而不以为无。我在另一个游戏制作中使用了异步场景加载,让我对异步加载有了一点了解。我发现异步加载只是一种加载场景的方式,这种方式是为了不让玩家无聊而使用。就是游戏的加载场景,不让玩家以为自己的手机卡死了。所以一切又回到了原点。
后来询问了我的一个游戏开发的学长,他就很快解决了我的疑问。
我会出现场景返回卡住一样的情况,是由于我改变了游戏的时间,让游戏“静止”了。
当我在进行游戏的时候点击Pause来到暂停界面,此时我的timeScale让游戏时间的流逝变为了0,静止不动达到暂停游戏的效果。
Time.timeScale官方描述如下:
文章来源:https://www.toymoban.com/news/detail-448002.html
timeScale的改变会影响全局,会影响粒子、动画等与帧率相关的。当我让timeScale变为0后,单击返回主菜单按钮,我的动画就被静止了,一直停在第一帧而不会继续进行下去,如果要改变此问题,只要在点击按钮的事件函数了将timeScale的的值改回1,就解决了返回场景卡住的情况文章来源地址https://www.toymoban.com/news/detail-448002.html
到了这里,关于关于Unity游戏开发场景切换:Time.timeScale的捣乱的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!