ソースコード
#if UNITY_EDITOR
using System;
using System.Reflection;
using UnityEditor;
namespace Kogane
{
public struct SetGameViewSelectedSizeIndexScope : IDisposable
{
private const BindingFlags BINDING_ATTRS = BindingFlags.Instance | BindingFlags.Public;
private static readonly Type GAME_VIEW_TYPE = Type.GetType( "UnityEditor.GameView,UnityEditor" );
private static readonly PropertyInfo SELECTED_SIZE_INDEX_INFO = GAME_VIEW_TYPE!.GetProperty( "selectedSizeIndex", BINDING_ATTRS );
private readonly int m_oldSelectedSizeIndex;
private bool m_isInitialized;
public SetGameViewSelectedSizeIndexScope( int selectedSizeIndex )
{
var editorWindow = EditorWindow.GetWindow( GAME_VIEW_TYPE );
m_oldSelectedSizeIndex = ( int )SELECTED_SIZE_INDEX_INFO!.GetValue( editorWindow );
SELECTED_SIZE_INDEX_INFO.SetValue( editorWindow, selectedSizeIndex );
m_isInitialized = true;
}
public SetGameViewSelectedSizeIndexScope
(
int selectedSizeIndex,
int oldSelectedSizeIndex
)
{
var editorWindow = EditorWindow.GetWindow( GAME_VIEW_TYPE );
m_oldSelectedSizeIndex = oldSelectedSizeIndex;
SELECTED_SIZE_INDEX_INFO!.SetValue( editorWindow, selectedSizeIndex );
m_isInitialized = true;
}
public void Dispose()
{
if ( !m_isInitialized ) return;
m_isInitialized = false;
var editorWindow = EditorWindow.GetWindow( GAME_VIEW_TYPE );
SELECTED_SIZE_INDEX_INFO!.SetValue( editorWindow, m_oldSelectedSizeIndex );
}
}
}
#endif
参考サイト様