Study Works

YuukiHiraiの勉強したものを上げていきます。

Unityで再生時にゲームビューを大きく表示する

はじめに

Unityでゲームを確認する際にゲームビューが小さい…けど「Maximize on Play」にしたらHierarchyやConsoleのウィンドウが見えなくてやりにくい…と感じたことはないでしょうか?

f:id:yuukihirai0331:20210430230427p:plain

再生時だけゲームビューを別ウィンドウとして表示するエディタ拡張を開発しました。

PlayWindow.cs

using UnityEditor;
using UnityEngine;
using System.Reflection;

namespace YuukiHirai_PlayWindow
{
    [InitializeOnLoad]
    public static class PlayWindow
    {
        const float GameView_Width = 1920;  // Gameビューの横サイズ
        const float GameView_Height = 1080; // Gameビューの縦サイズ 

        static PlayWindow()
        {
            // Unityプレイモード変更時に関数を登録
            EditorApplication.playModeStateChanged += OnChangedPlayMode;
        }

        static void OnChangedPlayMode(PlayModeStateChange state)
        {
            if (state == PlayModeStateChange.ExitingEditMode)
            {
                // ~Unity再生時~

                // Gameビューを表示、取得
                var typeView = Assembly.Load("UnityEditor").GetType("UnityEditor.GameView");
                var gameView = EditorWindow.GetWindow(typeView, false, "Game", false);

                // Gameビューを表示する位置を計算
                float posX = Screen.currentResolution.width / 2 - GameView_Width / 2;
                float posY = Screen.currentResolution.height / 2 - GameView_Height / 2;

                // Gameビューの位置とサイズを設定
                gameView.position = new Rect(posX, posY, GameView_Width, GameView_Height);
            }
            else if (state == PlayModeStateChange.EnteredEditMode)
            {
                // ~Unity再生終了時~

                // Gameビューを表示、取得
                var typeView = Assembly.Load("UnityEditor").GetType("UnityEditor.GameView");
                var gameView = EditorWindow.GetWindow(typeView, false, "Game", false);

                // Gameビューを閉じる
                gameView.Close();
            }
        }
    }
}

CSファイルを作成して、上記のコードをコピペしてください。

再生を停止した際はゲームビューが閉じるようになっています。

まとめ

UE4を参考に作りました、UE4ではゲーム再生時にウィンドウを表示してゲームを確認するフローが個人的に気に入っていたのでそれを参考に開発しました。
導入する際は自己責任でお願いいたします。