はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】PlayModeWindow(GameView or SimulatorView)に対してスクリプトから情報の取得・設定を行う方法

はじめに

今回はPlayModeWindowについて紹介したいと思います。ちなみにPlayModeWindowというのはGameViewSimulatorViewの総称のことですね。

SimulatorView or GameView

ゲームビュー - Unity マニュアル
Simulator ビュー - Unity マニュアル

Class containing methods to interact with the selected Unity PlayModeView (GameView, Simulator).

// DeepL翻訳
選択されたUnity PlayModeView(GameView、Simulator)と相互作用するメソッドを含むクラスです。

docs.unity3d.com

実験環境

Unity 2022.3.0f1

MaximizedかFullscreenになっているかどうか調べる

GetPlayModeFocusedを利用すると、MaximizedFullscreenになっているかどうかを調べることができます。(Maximized or Fullscreenの時はfalse)

// 利用例
[MenuItem("Sample/Execute")]
private static void Execute()
{
    // 例. PlayModeWindow.GetPlayModeFocused : true
    Debug.Log("PlayModeWindow.GetPlayModeFocused : " + PlayModeWindow.GetPlayModeFocused());
}

Unity - Scripting API: PlayModeWindow.GetPlayModeFocused

Maximized, Fullscreenでないときはtrue
Maximizedのときはfalse

レンダリング解像度の取得

GetRenderingResolutionを用いることでレンダリング解像度を取得することができます。

// 利用例
[MenuItem("Sample/Execute")]
private static void Execute()
{
    PlayModeWindow.GetRenderingResolution(out uint width, out uint height);

    // 例. PlayModeWindow.GetRenderingResolution : (1605, 564)
    Debug.Log($"PlayModeWindow.GetRenderingResolution : ({width}, {height})");
}
解像度を取得する方法

GameViewかSimulatorViewかを調べる

GetViewTypeを利用することで、GameViewSimulatorViewかどうかを取得することができます。

ちなみに返り値であるPlayModeViewTypeの実装は以下の通り。

/// <summary>
///   <para>List of supported PlayModeViews.</para>
/// </summary>
public enum PlayModeViewTypes
{
      /// <summary>
      ///   <para>The GameView entry.</para>
      /// </summary>
      GameView,
      /// <summary>
      ///   <para>The Simulator view entry.</para>
      /// </summary>
      SimulatorView,
}
// 利用例
[MenuItem("Sample/Execute")]
private static void Execute()
{
    // 例. GameView
    Debug.Log($"PlayModeWindow.GetViewType : {PlayModeWindow.GetViewType()}");
}
GameViewかSimulatorViewで出力が異なる

レンダリング解像度を設定する

SetCustomRenderingResolutionを用いることで解像度を設定することができます。

Aspectに新しいエントリを作成して設定する

Adds a new Custom resolution entry with the specified baseName. If an entry with the same baseName already exists, this method updates the resolution of this entry with the new values.

// DeepL翻訳
指定された baseName を持つ新しいカスタム解決エントリを追加します。同じ baseName のエントリが既に存在する場合は、このメソッドは、このエントリの解決内容を新しい値で更新します。

// 利用例
[MenuItem("Sample/Execute")]
private static void Execute()
{
    PlayModeWindow.SetCustomRenderingResolution(1024, 512, "1024x512");
}
上記コードを適応した様子

GameViewかSimulatorViewにフォーカスを当てる

SetPlayModeFocusedを用いることで、PlayModeWindowにフォーカスを当てることができます。

If true, sets the view to Focused, otherwise to maximized.

trueに設定するとPlay Focusedに変更される
// 利用例
[MenuItem("Sample/Execute")]
private static void Execute()
{
    // Trueに設定するとPlay Focusedに変更される
    PlayModeWindow.SetPlayModeFocused(true);
}

GameViewかSimulatorViewに変更する

SetViewTypeを用いることでGameViewSimulatorViewに変更することができます。

// 利用例
[MenuItem("Sample/Execute")]
private static void Execute()
{
    // GameViewに設定する
    PlayModeWindow.SetViewType(PlayModeWindow.PlayModeViewTypes.GameView);
        
    // SimulatorViewに設定する
    PlayModeWindow.SetViewType(PlayModeWindow.PlayModeViewTypes.SimulatorView);
}
SimulatorView or GameView