16
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

GameViewをフルスクリーンにする

FullScreen.png

UnityはPC上(UnityEditor)と各デバイス上でほぼ同じ画面が再現できるのと、Editorのほうがいろいろデバッグ機能を入れたりできるので、PCで動画収録したいなーということがあるかと思います。

となるとフルスクリーンにしたいところなんですが、GameViewにはそのものズバリな設定はなく、"Maximize On Play"もあくまで「Editorウィンドウ内で最大化」するもので、なんか違う…ということなります。

ということで、GameViewをフルスクリーンにするスクリプトを書いてみました。(Unity2017.1.1f1で確認)

FullScreenGameView.cs
using UnityEngine;
using UnityEditor;

// GameViewをフルスクリーンで表示するスクリプト(WindowsはF11、macOSはCommand+Shift+Fでトグル動作)
public class FullScreenGameView
{
    const string menuPath = "Window/Game (Full Screen)";

#if UNITY_EDITOR_WIN
    [MenuItem(menuPath + " _F11", false, 2001)]
#elif UNITY_EDITOR_OSX
    [MenuItem(menuPath + " %#f", false, 2001)]
#endif
    public static void Execute()
    {
        EditorWindow gameView = GetGameView();

        if (Menu.GetChecked(menuPath) == false)
        {
            gameView.Close();       // ドッキング中にサイズを変えるとEditorのサイズも変わってしまうため一旦閉じる

            float width = Screen.currentResolution.width;
            float height = Screen.currentResolution.height;
            float offset = 17.0f;   // GameViewのコントロールバーの高さ(Unity2017.1の場合) ※タブや枠は計算に入れない

            gameView = GetGameView();
            gameView.minSize = new Vector2(width, height + offset);
            gameView.position = new Rect(0, -offset, width, height + offset);

            Menu.SetChecked(menuPath, true);
        }
        else
        {
            // 位置パラメータをデフォルトに戻してからClose
            gameView.minSize = minSize;
            gameView.position = position;
            gameView.Close();

            Menu.SetChecked(menuPath, false);
        }
    }

    private static EditorWindow GetGameView()
    {
        // ウィンドウが存在しない場合は生成される
        return EditorWindow.GetWindow(System.Type.GetType("UnityEditor.GameView,UnityEditor"));
    }

    // デフォルト位置パラメータ(元の位置には戻せないので、扱いやすい位置&サイズにしておく)
    private static Vector2 minSize = new Vector2(100.0f, 100.0f);
    private static Rect position = new Rect(0.0f, 0.0f, 640.0f, 480.0f);
}

UnityEditorのメニューから"Window/Game (Full Screen)"を選択するか、ショートカット(WindowsはF11、MacはCommand+Shift+F)でトグル動作するようになっています。

なお、Macの場合は事前にUnityEditorの左上の緑ボタンを押して全画面モードにしておくか、システム環境設定でメニューバーとDockを消しておく必要があります。本来のお作法としてはフルスクリーン化のショートカットはCommand+Control+Fなんですが、MenuItemではMacのControl(Ctrlではない)は指定できないようです。

やっていることとしては、GameViewを取得して最小サイズをフルスクリーンと同じサイズにして、コントロールバーの高さ分だけ上にずらして位置を設定しています。これは、最小サイズをフルスクリーンにしないと、Unityが気を利かせて画面内に収まるように小さく調整してしまい、タブやウィンドウ枠が見えてしまうためです。

キモとしましては、EditorWindow.GetWindow()にUnityEditor.GameViewクラスを指定するんですが、privateなのでそのままでは使えません。そこで、C#のSystem.Type.GetTypeを使ってUnityEditorのアセンブリから型を取得しています。

C#って何でもありなのね…。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
16
Help us understand the problem. What are the problem?