游戏加载卡顿这个问题严重吗?
   
    
    
    一、背景
   
在游戏开发中游戏的卡顿不是某个单一的问题导致,是由诸多问题的量变在一起导致的;可能是资源层面的,也可能是逻辑层面的,也可能是网络层面的…;我这里要说的是Unity的中组件的挂载问题,当然这里的组件是指不必要的组件;
    
    
    二、组件挂载问题
   
一个不必要的组件在GameObject上存在3种情况:
- 直接移除,没有挂载这个组建
- 挂载了这个组建,但是没有启用
- 挂起了,并启用了
    如果数据到达一定的量,你就会得到下面的这张数据实践图:
    
    
    
    这就是实际的测试数据;这里只是测试加载、实例化的问题;
   
    
    
    三、如何解决
   
- 如果不是需要的组建一定要删除
- 如果组建加载的时候不直接使用,而是在特定的时刻使用,建议不需要直接启用;在需要的时候启用也可;
    
    
    四、视频详细地址
   
    
    
    五、测试代码
   
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.Text;
public class ValakiCreateObjDemos : MonoBehaviour
{
    [SerializeField] Text noBoxColliderText;
    [SerializeField] Text noEnabledBoxColliderText;
    [SerializeField] Text enableBoxColliderText;
    [SerializeField] GameObject noBoxColliderItem;
    [SerializeField] GameObject noEnabledBoxCollider;
    [SerializeField] GameObject enabledBoxCollider;
    StringBuilder noBoxColliderSB = new StringBuilder("无BoxCollider\n");
    StringBuilder noEnableBoxColliderSB = new StringBuilder("不启用BoxCollider\n");
    StringBuilder enabledBoxColliderSB = new StringBuilder("启用BoxCollider\n"); 
    [SerializeField] int times;
    
    public void OnClickCreateCubeNoBoxColliderBtn()
    {
        CreateCubes(noBoxColliderItem, noBoxColliderSB, noBoxColliderText);
    }
    public void OnClickCreateCubeNoEnableBoxColliderBtn()
    {
        CreateCubes(noEnabledBoxCollider, noEnableBoxColliderSB, noEnabledBoxColliderText);
    }
    public void OnClickCreateCubeEnabledBoxColliderBtn()
    {
        CreateCubes(enabledBoxCollider, enabledBoxColliderSB, enableBoxColliderText);
    }
    void CreateCubes(GameObject item, StringBuilder stringBuilder, Text text)
    {
        long startTime = GetTimeStamp();
        Debug.Log(startTime);
        for (int i = 1; i <= times; i++)
        {
            GameObject go = GameObject.Instantiate(item);
            go.name = i.ToString();
            if (i == times)
            {
                long offset = GetTimeStamp() - startTime;
                stringBuilder.Append("\n耗费时间:");
                stringBuilder.Append(offset);
                stringBuilder.Append("ms");
                stringBuilder.Append("\n");
                text.text = stringBuilder.ToString();
            }
        } 
    }
    public long GetTimeStamp()
    {
     	return (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000;
    }
}
    
     结语:
    
   
    
     希望居家办公早点结束…【
     
      valaki
     
     】
    
   
 
版权声明:本文为valaki原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
