[Editor] 에디터에서 Play 할 때, GameView Scale 초기화 문제 보정
Unity3D/Editor / 2024. 9. 6. 14:42
Unity 2021.3.42f1
----
[참고]
[링크] https://blueasa.tistory.com/2853
위 링크의 내용을 한 번 해보고,
안되면 아래 스크립트를 사용해 보자.
----
에디터의 GameView에서 Resolution을 비율이 아닌 해상도를 선택(예:1920x1080 Landscape)하면 Scale 때문에 한화면에 다 보이지 않는다.
그래서 Scale을 최소치로 내리는데, 문제는 Play를 실행하면 최소치로 내려놓은 Scale 값이 초기화되면서 화면이 다시 커진다.
그래서 Play 이후에 다시 Scale 값을 내리는 불편함이 생기는데, 찾아보니 같은 불편을 느끼는 사람이 많은 것 같다.
아래와 같은 스크립트를 만들어놨길래 써보니 꽤 마음에 든다.
아래 스크립트를 Editor 폴더에 넣어주기만 하면 된다.
using System;
using System.Reflection;
using UnityEditor;
using UnityEngine;
using Object = UnityEngine.Object;
[InitializeOnLoad]
public static class FixResolutionScale
{
static FixResolutionScale()
{
EditorApplication.playModeStateChanged += OnPlayStateChanged;
SetGameViewScale();
}
private static void OnPlayStateChanged(PlayModeStateChange playModeStateChange)
{
SetGameViewScale();
}
private static void SetGameViewScale()
{
Type gameViewType = GetGameViewType();
EditorWindow gameViewWindow = GetGameViewWindow(gameViewType);
if (gameViewWindow == null)
{
Debug.LogError("GameView is null!");
return;
}
var defScaleField = gameViewType.GetField("m_defaultScale", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
//whatever scale you want when you click on play
float defaultScale = 0.1f;
var areaField = gameViewType.GetField("m_ZoomArea", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
var areaObj = areaField.GetValue(gameViewWindow);
var scaleField = areaObj.GetType().GetField("m_Scale", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
scaleField.SetValue(areaObj, new Vector2(defaultScale, defaultScale));
}
private static Type GetGameViewType()
{
Assembly unityEditorAssembly = typeof(EditorWindow).Assembly;
Type gameViewType = unityEditorAssembly.GetType("UnityEditor.GameView");
return gameViewType;
}
private static EditorWindow GetGameViewWindow(Type gameViewType)
{
Object[] obj = Resources.FindObjectsOfTypeAll(gameViewType);
if (obj.Length > 0)
{
return obj[0] as EditorWindow;
}
return null;
}
}
[출처] https://discussions.unity.com/t/game-view-scale-on-compilation-play/217998
반응형
'Unity3D > Editor' 카테고리의 다른 글
[펌] Render the view frustum of a camera in Unity (0) | 2024.10.04 |
---|---|
[Editor] 에디터에서 Play 할 때, GameView Scale 초기화 문제 수정 (0) | 2024.09.06 |
[펌] Unity Editor detect when build fails (0) | 2023.09.20 |
[에디터확장] BurstDebugInformation_DoNotShipDeleter (0) | 2023.02.10 |
[에디터확장] WindowsIL2CPPBuildBackUpThisFolderDeleter (0) | 2022.09.14 |