PlayModeWindow
は、Unity 2022.2で追加されたクラスです。
従来、UnityエディターのGameビューをスクリプトから操作するにはリフレクションによる非公開APIの使用が必要でした。
Unity 2022.2からは、PlayModeWindow
クラスの静的メソッドで操作できます。
PlayModeWindow
クラスは、PlayModeView
クラス*1を制御する機能を持ち、GameビューとSimulatorビューを切り替えたり、解像度を変更するAPIが提供されています。
Gameビューへの切り替え
解像度の指定は、SimulatorビューではなくGameビュー表示である必要があります。 次のように切り替えます。
PlayModeWindow.SetViewType(PlayModeWindow.PlayModeViewTypes.GameView);
引数には、GameView
もしくはSimulatorView
を指定できます。
解像度の指定
解像度はSetCustomRenderingResolution
メソッドで変更できます。
Full HD(1920×1080)に変更する場合、次のように指定します。
PlayModeWindow.SetCustomRenderingResolution(1920, 1080, "Full HD");
テスト実行時の解像度を固定する方法1(ICallbacks)
たとえば、すべてのテストで解像度をFull HD(1920×1080)に固定したければ、ICallbacks
を使用して次のように実装します。
public class OpenGameViewAtRunStarted : ICallbacks { [InitializeOnLoadMethod] private static void SetupTestCallbacks() { var api = ScriptableObject.CreateInstance<TestRunnerApi>(); api.RegisterCallbacks(new OpenGameViewAtRunStarted()); } public void RunStarted(ITestAdaptor testsToRun) { PlayModeWindow.SetViewType(PlayModeWindow.PlayModeViewTypes.GameView); PlayModeWindow.SetCustomRenderingResolution(1920, 1080, "Full HD"); } // snip }
テスト実行時の解像度を固定する方法2(GameViewResolution属性)
テスト実行時に解像度指定する場合は、Test Helperパッケージに含まれるGameViewResolution
属性が便利です*2。
この属性はテストアセンブリ・クラス・メソッドいずれかに付けることができ、どこにつけても各テストメソッドの実行前(SetUp
の前)に処理されます。
すべてのテストで同じ解像度でよければ、次のようにテストアセンブリに付与します*3。
[assembly: GameViewResolution(1920, 1080, "Full HD")]
テストごとに個別に指定したいときには、次のようにテストクラスやメソッドに付与できます。
[TestFixture] public class MyTestClass { [UnityTest] [GameViewResolution(1920, 1080, "Full HD")] public IEnumerator MyTestMethod() { // test } }
Test Helperパッケージは、Unity 2019.4以降で利用できます。 Unity 2022.2未満のときはリフレクションによる非公開APIを使用していますので、自分で実装するときの参考にもなるはずです。
補足
本記事は、拙著『Unity Test Framework完全攻略ガイド 統合テスト編』の第5章「ビジュアルリグレッションテスト」からの抜粋です。
テストの基本から知りたい! という方は、『Unity Test Framework完全攻略ガイド 第2版』からお読みください!