栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > Unity3D

【优化】Unity游戏加载卡顿原因之一:Asset大小分配问题

Unity3D 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【优化】Unity游戏加载卡顿原因之一:Asset大小分配问题

一、背景

游戏的卡顿是一个老问题,是由很多很多方面的问题导致,那么这篇文章说的就是关于游戏中一个Asset大小的问题;

在加载一个Assett的过程中,不知道看官你有没有考虑过一个资源的大小对加载过程是否会有影响?不用想,肯定是考虑过,大的资源肯定比小的资源耗时间;

那么有没有考虑过把一个大的资源拆分成小的几个资源以后,它们的加载时间问题呢?这就是这节的内容;

二、实践

把一个大物体拆分成三份:

左边的A、B、C是右边的3个组成部分;
这个时候分别对左边的进行加载计算总和与右边的加载进行比较会是什么样的结果;

数据截图:

结果就是:整体加载处理的实践要大于分开加载处理的时间

三、视频讲解

视频详解

四、实践源码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.Text;
using UnityEngine.UI;


public class ValakiCreateObjectDemos : MonoBehaviour
{

    public Text textMult;
    public Text textSingle;
    public Text textTips;

    List cacheItems = new List();

    StringBuilder singleSb = new StringBuilder();
    StringBuilder multSb = new StringBuilder();

    public void OnClickSingleBtn()
    {

        List urls = new List() { "GB" };
        CreateCubes(urls, singleSb, textSingle);
    }

    public void OnClickMultBtn()
    {

        List urls = new List() { "GB_A", "GB_B", "GB_C" };
        CreateCubes(urls, multSb, textMult);

    }

    void CreateCubes(List urls, StringBuilder stringBuilder, Text text)
    {
        long startTime = GetTimeStamp();
        Debug.Log(startTime);
        for (int i = 0; i < urls.Count; i++)
        {
            GameObject go = Resources.Load("Prefabs/" + urls[i]);
            go = GameObject.Instantiate(go);
            go.SetActive(true);
            go.name = urls[i];
            cacheItems.Add(go);
            if (i == urls.Count - 1)
            {
                long offset = GetTimeStamp() - startTime;
                stringBuilder.Append("n耗费时间:");
                stringBuilder.Append(offset);
                stringBuilder.Append("ms");
                stringBuilder.Append("n");
                text.text = stringBuilder.ToString();
                textTips.text = "数据载入内存完成";
            }
        }

    }

    public long GetTimeStamp()
    {
        return (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000;
    }


    public void OnClickMemoryBtn()
    {
        int len = cacheItems.Count;
        for (int i = len - 1; i >= 0; i--)
        {
            Destroy(cacheItems[i]);
        }
        Resources.UnloadUnusedAssets();
        System.GC.Collect();
        textTips.text = "内存数据释放完成";
    }


    public void OnClickClearShowContext()
    {
        singleSb.Clear();
        multSb.Clear();
        textSingle.text = "";
        textMult.text = "";
        textTips.text = "";
    }
}

结语

路太长、夜未央【valaki】

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/900255.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号