Unity URP 2D中SpriteRenderer安卓构建运行时切换Sprite无视觉更新
URP 2D项目安卓设备Sprite切换无视觉更新问题解决
问题背景
Unity 6000.0.3f1版本下,URP 2D项目使用脚本定期切换SpriteRenderer的Sprite,日志显示Sprite数据已成功切换,但三星S24 Ultra设备上无视觉变化;编辑器和Built-in RP 2D项目运行正常。测试脚本如下:
using System.Collections; using UnityEngine; public class TestSpriteRendererChange : MonoBehaviour { [SerializeField] private SpriteRenderer spriteRenderer; [SerializeField] private Sprite[] sprites; private void Start() { StartCoroutine(ChangeSprites()); } private IEnumerator ChangeSprites() { var index = 0; foreach (var sprite in sprites) { Debug.Log($"before sprite: {spriteRenderer.sprite.name}"); spriteRenderer.sprite = sprite; Debug.Log($"after sprite: {spriteRenderer.sprite.name}"); yield return new WaitForSeconds(0.1f); index++; } if (index == sprites.Length) { index = 0; StopCoroutine(nameof(ChangeSprites)); StartCoroutine(nameof(ChangeSprites)); } } }
可行解决方案
关闭URP 2D动态批处理
进入Project Settings > Graphics > URP Global Settings > 2D Renderer,关闭Dynamic Batching选项后重新打包。URP 2D的动态批处理可能在安卓设备上导致Sprite切换后的渲染状态未及时更新。强制SpriteRenderer刷新
设置Sprite后,通过禁用再启用组件的方式强制触发渲染更新,修改代码如下:spriteRenderer.sprite = sprite; // 强制刷新渲染状态 spriteRenderer.enabled = false; spriteRenderer.enabled = true; Debug.Log($"after sprite: {spriteRenderer.sprite.name}");也可以尝试调用
spriteRenderer.Rebuild(CanvasUpdate.PreRender);(涉及UI元素时更适用)。检查Sprite导入配置
确保所有切换的Sprite导入设置中:- Texture Type为
Sprite (2D and UI) - 安卓平台下的Compression Format选择ETC2(适配三星设备GPU)
- 若使用GPU实例化,确认Enable GPU Instancing选项已正确配置
- Texture Type为
验证URP渲染管线配置
- 确认场景中的2D相机关联了正确的URP 2D Renderer
- 相机的Culling Mask包含Sprite所在的图层
- 项目的Graphics Settings中已将URP Render Pipeline Asset设为默认
升级Unity或URP包
Unity 6000.0.3f1属于早期版本,可能存在URP 2D与安卓新设备的兼容性bug。尝试升级到最新的Unity 6.x稳定版,或更新URP包至对应版本的补丁版本。
内容的提问来源于stack exchange,提问作者CODEHUB
相关产品推荐
相关产品推荐

