2016-10-24 10 views

ответ

2

Нет это не невозможно, если вы не являетесь стойким хакером. GameView - это внутренний класс, недоступный для сценариев редактора. Но эй, всегда есть выбор для хорошего отражения. Этот вопрос поставит вас на нужную траекторию: http://answers.unity3d.com/questions/179775/game-window-size-from-editor-window-in-editor-mode.html

+0

Это выглядит как хороший вариант! Но как они узнали точное название метода, который делает то, что он делает? Как я могу найти имя метода, который мне нужен (и если он существует)? Есть ли список методов или что-то еще? – Dmitry

+0

О, я не могу ответить на этот вопрос. Я никогда не пробовал копаться в gameView –

3

Вы можете сделать это с отражением. Изменено similar Ответ, который я сделал давно. Ниже приведена функция рабочего набора/получения статистики. Протестировано с Unity 5.4.0f1. Я поместил версию Unity, чтобы люди не жаловались, когда перестали работать. Обновление Unity может прервать это в любое время, если они переименуют любые переменных.

  • GameView = A класс, который используется для представления Unity вкладки Gameview в редакторе.
  • GetMainGameView = статическая функция, которая возвращает ток GameView экземпляр.
  • m_Stats = логическая переменная, которая используется для определения того, должна ли отображаться статистика или нет.

Код:

//Show/Hide stats 
void showStats(bool enableStats) 
{ 
    Assembly asm = Assembly.GetAssembly(typeof(Editor)); 
    Type type = asm.GetType("UnityEditor.GameView"); 
    if (type != null) 
    { 
     MethodInfo gameViewFunction = type.GetMethod("GetMainGameView", BindingFlags.Static | 
      BindingFlags.NonPublic); 

     object gameViewInstance = gameViewFunction.Invoke(null, null); 


     FieldInfo getFieldInfo = type.GetField("m_Stats", BindingFlags.Instance | 
               BindingFlags.NonPublic | BindingFlags.Public); 

     getFieldInfo.SetValue(gameViewInstance, enableStats); 
    } 
} 

//Returns true if stats is enabled 
bool statsIsEnabled() 
{ 
    Assembly asm = Assembly.GetAssembly(typeof(Editor)); 
    Type type = asm.GetType("UnityEditor.GameView"); 
    if (type != null) 
    { 
     MethodInfo gameViewFunction = type.GetMethod("GetMainGameView", BindingFlags.Static | 
      BindingFlags.NonPublic); 

     object gameViewInstance = gameViewFunction.Invoke(null, null); 


     FieldInfo getFieldInfo = type.GetField("m_Stats", BindingFlags.Instance | 
               BindingFlags.NonPublic | BindingFlags.Public); 

     return (bool)getFieldInfo.GetValue(gameViewInstance); 
    } 
    return false; 
} 

Использование:

//Show stats 
showStats(true); 

//Hide stats 
showStats(false); 

//Read stats 
bool stats = statsIsEnabled(); 

 Смежные вопросы

  • Нет связанных вопросов^_^