Я хочу включить/выключить эту панель с помощью скрипта C# во время игры. Возможно ли это? Для этого не найдено никаких функций API-интерфейса редактора.Как включить/выключить панель статистики в редакторе во время игры?
0
A
ответ
2
Нет это не невозможно, если вы не являетесь стойким хакером. GameView - это внутренний класс, недоступный для сценариев редактора. Но эй, всегда есть выбор для хорошего отражения. Этот вопрос поставит вас на нужную траекторию: http://answers.unity3d.com/questions/179775/game-window-size-from-editor-window-in-editor-mode.html
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();
Это выглядит как хороший вариант! Но как они узнали точное название метода, который делает то, что он делает? Как я могу найти имя метода, который мне нужен (и если он существует)? Есть ли список методов или что-то еще? – Dmitry
О, я не могу ответить на этот вопрос. Я никогда не пробовал копаться в gameView –