Unity场景替换AssetBundle精灵后部分物体尺寸异常求助
问题描述
场景内有多个带Sprite Renderer的物体(如“bottles”和“box”),初始状态显示正常;启动后加载AssetBundle并替换物体的Sprite,替换后“bottles”显示正常,“box”却莫名缩小。已确认前后Pixels Per Unit参数完全一致,精灵与物体配置也无差异,但表现差异明显。
- 结果截图:替换后box物体尺寸异常缩小的画面
- 预期效果截图:box与bottles尺寸匹配的正常画面
当前使用代码
获取精灵的代码
public Sprite GetSprite(string spriteName) { if (_loadedSprites.TryGetValue(spriteName, out var sprite1)) { return sprite1; } else { var texture = _currentAssetBundle.LoadAsset<Texture2D>(spriteName); var sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), Vector2.one * 0.5f, 100f); sprite.name = $"RM_{spriteName}"; _loadedSprites.Add(spriteName, sprite); return sprite; } }
设置精灵的代码
protected override void SpriteSetter(Sprite sprite) { _spriteRenderer.sprite = sprite; }
排查方向
验证Sprite的实际像素尺寸
在替换前后分别打印box物体原始Sprite和新Sprite的rect.width/rect.height,确认AssetBundle中加载的Texture2D实际分辨率是否和原始Sprite一致。若AssetBundle中的纹理被压缩或缩放,即使PPU相同,显示尺寸也会按比例缩小。检查Transform组件参数
替换精灵前后,打印box物体的localScale值,排查是否有其他脚本、动画组件(如Animator的状态机/帧动画)在替换时意外修改了缩放参数。对比Sprite Renderer组件配置
逐行对比bottles和box的Sprite Renderer参数:- 确认
Draw Mode是否一致(Simple/Tiled/Sliced模式会直接影响显示逻辑) - 若Draw Mode为Tiled/Sliced,检查
Size参数是否与原始配置一致 - 查看
Flip选项是否存在差异,排除翻转导致的视觉尺寸错觉 - 确认
Sorting Layer和Order in Layer是否影响渲染层级(虽不直接改尺寸,但可能造成视觉误判)
- 确认
检查AssetBundle打包时的纹理导入设置
确认box对应的Texture2D在打包AssetBundle时的导入设置:Texture Type是否为Sprite(2D and UI)- 是否开启了纹理压缩、Resize选项,导致实际分辨率被修改
Filter Mode、Wrap Mode是否与bottles的纹理设置一致
校验Sprite.Create的参数准确性
用代码打印原始Sprite和新创建Sprite的pixelsPerUnit值,确认是否真的一致(避免手动检查遗漏);同时对比两者的pivot参数,若原始Sprite的锚点不是(0.5,0.5),可能导致位置偏移,间接让人误以为尺寸缩小。排查Canvas/Camera的影响
若物体嵌套在Canvas下,检查Canvas的Scale Factor、Render Mode是否有变化;若使用3D Camera,检查orthographicSize(正交相机)或fieldOfView(透视相机)是否被修改,导致不同物体的显示缩放比例不一致。
内容的提问来源于stack exchange,提问作者Yurii Zabotkin

