30
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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#って何でもありなのね…。

30
16
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?