You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Texture转Sprite异常求助:截图纹理转Sprite显示错误

问题排查与解决办法

嘿,这种情况我在做Unity项目时也踩过坑!存成PNG正常但转Sprite后显示错图,大概率是纹理引用、导入设置或者创建逻辑出了问题,给你梳理几个排查方向:

1. 先检查纹理的导入设置

这是最容易忽略的点:

  • 选中你用截图生成的Texture,打开Inspector面板,确认Texture Type是Sprite (2D and UI)(如果是给UI用的Sprite),别用默认的Texture2D(默认是给3D材质用的,转Sprite容易出问题)。
  • 看Sprite Mode,如果是整图就选Single,避免自动切割成多Sprite导致引用混乱。
  • 改完记得点Apply保存,再重新创建Sprite试试。

2. 排查Sprite创建的代码逻辑

你没贴代码,但我猜可能是这些常见坑:

  • 会不会不小心复用了旧的Sprite对象?比如用静态变量缓存了之前的Sprite,新纹理生成后没更新引用。
  • 创建Sprite时的Rect参数是不是错了?如果Rect超出了当前纹理范围,或者用了其他纹理的Rect值,Unity会乱采样(尤其是纹理打包在图集里时)。正确的创建姿势应该是:
    Sprite newSprite = Sprite.Create(
        你的目标纹理, 
        new Rect(0, 0, 你的目标纹理.width, 你的目标纹理.height), 
        new Vector2(0.5f, 0.5f) // 中心点,按需调整
    );
    
  • 如果是用ScreenCapture截的图,要注意Unity可能会复用临时纹理对象,导致后续引用错乱。可以先复制一份纹理数据再转Sprite:
    Texture2D capturedTex = ScreenCapture.CaptureScreenshotAsTexture();
    // 复制新纹理,避免原纹理被回收或复用
    Texture2D copyTex = new Texture2D(capturedTex.width, capturedTex.height);
    copyTex.SetPixels(capturedTex.GetPixels());
    copyTex.Apply();
    // 用复制后的纹理创建Sprite
    Sprite targetSprite = Sprite.Create(copyTex, new Rect(0,0,copyTex.width,copyTex.height), Vector2.one * 0.5f);
    

3. 看看是不是Sprite Atlas搞的鬼

如果你的UI图片都打包在Sprite图集里,Unity自动合并纹理后,很容易出现引用混淆:

  • 把截图生成的Texture设置为不参与图集打包:在Inspector的Sprite Editor里勾选Exclude from Atlas,或者在纹理导入设置里找对应选项。
  • 确保创建Sprite时用的是原始纹理,而不是图集里的子纹理。

4. 清理缓存+重启编辑器

有时候Unity的编辑器缓存会抽风,试试这几步:

  • 点击Edit -> Clear All PlayerPrefs
  • 右键Project窗口里的纹理,选Reimport
  • 重启Unity再测试一遍

要是还解决不了,把你创建Sprite的代码贴出来,我帮你精准排查~

内容的提问来源于stack exchange,提问作者SHAI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:20:09