能否控制Unity命令行运行Play Mode单元测试时的分辨率?
解决Unity命令行运行PlayMode测试时固定分辨率的问题
你可以通过两种方式修改测试时的分辨率,满足不同场景的测试需求:
1. 命令行参数直接指定分辨率
Unity命令行支持通过-screen-width和-screen-height参数强制设置运行分辨率,把这两个参数加到你的现有指令里就行。比如要以1920×1080分辨率运行测试:
Unity.exe -runTests -batchmode -projectPath ~/path -testPlatform PlayMode -screen-width 1920 -screen-height 1080
这种方式适合在CI/CD流程里批量跑单一分辨率的测试,如果需要覆盖多种分辨率,只需要多次调用不同参数的命令即可。
2. 在测试代码中动态切换分辨率
如果想在一套测试里验证多种分辨率下的功能,直接在测试代码里用Screen.SetResolution()动态设置更灵活。示例代码如下:
using NUnit.Framework; using UnityEngine; public class ResolutionValidationTests { // 保存原始分辨率,测试后恢复 private Resolution _originalRes; [SetUp] public void SaveOriginalResolution() { _originalRes = Screen.currentResolution; } [Test] public void TestFunctionalityAt1080p() { // 设置1080p分辨率 Screen.SetResolution(1920, 1080, FullScreenMode.Windowed); // 验证分辨率是否生效 Assert.AreEqual(1920, Screen.width); Assert.AreEqual(1080, Screen.height); // 在这里编写对应分辨率下的功能测试逻辑 // 比如UI布局适配、相机视野验证等 } [Test] public void TestFunctionalityAt720p() { Screen.SetResolution(1280, 720, FullScreenMode.Windowed); Assert.AreEqual(1280, Screen.width); Assert.AreEqual(720, Screen.height); // 720p分辨率下的功能测试 } [TearDown] public void RestoreOriginalResolution() { // 恢复到测试前的分辨率,避免影响后续测试 Screen.SetResolution(_originalRes.width, _originalRes.height, _originalRes.fullScreenMode); } }
这种方法允许你在同一个测试套件里覆盖多种分辨率场景,不需要多次启动Unity,效率更高。
注意:PlayMode测试中Screen.SetResolution()是完全生效的,但如果你的测试涉及到异步加载或画面渲染,可能需要用[UnityTest]配合协程等待帧刷新后再验证结果。
内容的提问来源于stack exchange,提问作者Derek Thurn
相关产品推荐
相关产品推荐

