Unity加载超长图片报错Texture has out of range width/height如何解决
Unity超长图片加载
Texture has out of range width / height报错解决方案 报错原因
Texture2D.LoadImage()方法会自动读取图片的实际宽高覆盖初始化时设置的32x32参数,当图片的宽度/高度超过当前运行设备支持的最大纹理尺寸时,就会触发该报错。- 不同设备支持的最大纹理尺寸可通过
SystemInfo.maxTextureSize获取,常规移动设备普遍支持最大8192x8192,部分高端设备支持16384x16384,超过该值的纹理无法被GPU正常解析。
可落地解决方案
方案1:图片分片加载(全平台兼容,优先推荐)
适合需要保留原图清晰度的场景,操作逻辑如下:
- 预处理阶段将超长图按照最大支持纹理尺寸切分为多个尺寸合规的小图,可在编辑器内完成切分,也可由后端提前处理完成。
- 运行时按顺序加载所有分片小图,使用多个
RawImage或SpriteRenderer在场景内按坐标拼接,实现完整长图的展示效果。
方案2:降采样压缩(适合对清晰度要求不高的场景)
不需要保留原图1:1精度时,可提前将图片等比缩放到设备支持的尺寸范围内再加载:
// 需引入第三方图片处理库如ImageSharp读取原图尺寸 byte[] fileData = File.ReadAllBytes(filePath); using(var image = Image.Load<Rgba32>(fileData)) { int maxSupportedSize = SystemInfo.maxTextureSize; // 计算等比缩放系数 float scaleFactor = Mathf.Min((float)maxSupportedSize / image.Width, (float)maxSupportedSize / image.Height); int targetWidth = Mathf.RoundToInt(image.Width * scaleFactor); int targetHeight = Mathf.RoundToInt(image.Height * scaleFactor); // 执行缩放 image.Mutate(opt => opt.Resize(targetWidth, targetHeight)); // 赋值到Texture2D Texture2D resizedTex = new Texture2D(targetWidth, targetHeight, TextureFormat.RGBA32, false); byte[] pixelData = new byte[targetWidth * targetHeight * 4]; image.CopyPixelDataTo(pixelData); resizedTex.LoadRawTextureData(pixelData); resizedTex.Apply(); }
方案3:编辑器调试临时方案
仅在PC编辑器测试时生效:
- 打开菜单栏 Edit > Project Settings > Player > Other Settings
- 找到
Max Texture Size配置项,将数值调整为大于你当前图片的宽高即可。
注意:该配置仅对编辑器环境生效,发布到移动端/其他平台时仍受硬件性能限制,不可作为线上发布的解决方案。
内容的提问来源于stack exchange,提问作者anas moussa
相关产品推荐
相关产品推荐

