毕业设计之场景异步加载

       决定从一些小部分做起,与游戏整体框架无关的做起。第一个做的就是场景的异步加载了。之前并没有接触过异步加载,都是直接SceneManager.LoadScene(name);对于小场景的话没问题,但是如果场景资源太多就会造成卡顿,所以需要异步加载。

      A场景要转换到C场景,则需要一个B场景去过过渡,在B场景等待C的加载,加载完再转换到C场景。

 一共需要两个脚本:

    Globe:
 public class Globe:

{
    public static string nextSceneName="GameScene";//全局静态变量,要转换的场景名称
}
AsyncLoadScene(加载过程):

public class AsyncLoadScene : MonoBehaviour
{
    public Slider loadingSlider;  //加载进度条
    public Text loadingText;      //加载数字
    private float loadingSpeed = 1;
    private float targetValue;
    private AsyncOperation operation;

    // Use this for initialization  
    void Start()
    {
        loadingSlider.value = 0.0f;

        if (SceneManager.GetActiveScene().name == "LoadingScene")
        {
            //启动协程  
            StartCoroutine(AsyncLoading());
        }
    }

    IEnumerator AsyncLoading()
    {
        operation = SceneManager.LoadSceneAsync(Globe.nextSceneName);
        operation.allowSceneActivation = false;

        yield return operation;
    }

    void Update()
    {
        targetValue = operation.progress;

        if (operation.progress >= 0.9f)
        {
            targetValue = 1.0f;
        }

        if (targetValue != loadingSlider.value)
        {
            loadingSlider.value = Mathf.Lerp(loadingSlider.value, targetValue, Time.deltaTime * loadingSpeed);
            if (Mathf.Abs(loadingSlider.value - targetValue) < 0.01f)
            {
                loadingSlider.value = targetValue;
            }
        }

        loadingText.text = ((int)(loadingSlider.value * 100)).ToString() + "%";

        if ((int)(loadingSlider.value * 100) == 100)
        {
            //允许异步加载完毕后自动切换场景  
            operation.allowSceneActivation = true;
        }
    }
}



点击开始按钮:
    //开始点击按钮
    public void StartButtonClick()
    {
        //开始按钮点击,隐藏界面,移动摄像机视角
        Logo.SetActive(false);
        StartUI.SetActive(false);
        //移动摄像机
        //canMove = true;
        //异步加载游戏场景,先加载loading场景
        SceneManager.LoadScene("LoadingScene");
        //因为到了LoadingScene场景就开始执行对于下一个场景的加载,所以要提前设置要加载场景的名字
        Globe.nextSceneName = "GameScene";
    }




参考博文:http://blog.csdn.net/qq_33747722/article/details/72582213

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zero游戏开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值