Unity项目打包版本屏幕分辨率重复问题求助
Unity打包后分辨率重复的解决方案
问题核心在于Screen.resolutions返回的Resolution结构体,其默认的相等比较逻辑(Distinct()默认依赖的)没有完全匹配分辨率的所有关键属性(宽度、高度、刷新率),导致打包后系统返回的相似分辨率无法被正确去重。
解决步骤:
- 自定义一个
Resolution的相等比较器,明确指定判断两个分辨率相等的条件:
public class ResolutionComparer : IEqualityComparer<Resolution> { public bool Equals(Resolution x, Resolution y) { return x.width == y.width && x.height == y.height && x.refreshRate == y.refreshRate; } public int GetHashCode(Resolution obj) { return HashCode.Combine(obj.width, obj.height, obj.refreshRate); } }
- 在获取分辨率时,使用这个自定义比较器调用
Distinct():
_resolutions = Screen.resolutions .Distinct(new ResolutionComparer()) .OrderBy(x => x.width) .ThenBy(x => x.height) .ThenBy(x => x.refreshRate) .ToArray();
为什么编辑器里正常?
编辑器环境下,Unity对系统返回的分辨率数据做了额外处理,使得默认的相等逻辑能正确识别重复项;但打包后,直接调用系统API返回的分辨率数据,其结构体实例的默认比较逻辑无法覆盖所有关键参数,导致Distinct()失效。
内容的提问来源于stack exchange,提问作者Hatemsla
相关产品推荐
相关产品推荐

