Unity中加载Texture2D不断消耗内存的问题
发布日期:2021-06-30 19:35:36 浏览次数:4 分类:技术文章

本文共 1540 字,大约阅读时间需要 5 分钟。

文章目录

一、加载Texture2D显示图片

游戏项目中,我们经常需要通过网络加载图片,比如用户头像、背景图,也可能是加载本地的某个图片,比如截屏图,一般我们会用一个Texture2D来显示这个图片。

二、案例

比如我这里,从StreamingAssets中加载一张背景图

在这里插入图片描述
代码如下:

using System.Collections;using UnityEngine;using UnityEngine.Networking;using UnityEngine.UI;public class Main : MonoBehaviour{
public Button loadTexturebtn; public RawImage rawImage; void Awake() {
loadTexturebtn.onClick.AddListener(() => {
StartCoroutine(LoadTexture()); }); } IEnumerator LoadTexture() {
var url = Application.streamingAssetsPath + "/bg.png";#if UNITY_EDITOR url = "file:///" + url;#endif UnityWebRequest uwr = UnityWebRequest.Get(url); yield return uwr.SendWebRequest(); if (uwr.isNetworkError || uwr.isHttpError) {
Debug.Log(uwr.error); yield break; } while (!uwr.isDone) {
yield return null; } var data = uwr.downloadHandler.data; //这里,就会在内存中申请空间了 Texture2D texture = new Texture2D(rawImage.mainTexture.width, rawImage.mainTexture.height); texture.LoadImage(data); rawImage.texture = texture; }}

三、内存分析

我们new了一个Texture2D,然后赋值给RawImage显示,如果我们不断得点击Load Texture按钮,就会不断地执行加载,不断地new Texture2D,导致不断地申请内存空间,我们可以通过Memory Profile看看内存情况,我点击了30次Load Texture按钮,内存中申请了30个Texture2D,并且没有释放掉,即使我把RawImage销毁掉,内存中依然会存放那30个Texture2D

在这里插入图片描述

四、如何释放内存

1、错误示范

销毁RawImage,然后隔一帧,调用Resources.UnloadUnusedAssets();

在这里插入图片描述

经过测试,这样是不能释放内存的,内存中依然存着Texture2D

在这里插入图片描述

2、正确示范

直接销毁Texture2D

在这里插入图片描述

可以看到,内存中释放了Texture2D

在这里插入图片描述

转载地址:https://linxinfa.blog.csdn.net/article/details/108347571 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Unity使用Shader实现3D模型外描边效果
下一篇:Unity2020中使用MemoryProfile卡死和报错的问题

发表评论

最新留言

很好
[***.229.124.182]2024年04月21日 09时28分05秒