Объявление
public static Networking.PlayerConnection.IConnectionState GetConnectionState(EditorWindow parentWindow, ActionПараметры
parentWindow | Окно редактора, которое будет использовать соединение. |
connectedCallback | Обратный вызов, который запускается всякий раз, когда попытка подключения, инициированная пользователем, завершается успешно.. |
Возвращает
IConnectionState Возвращает несериализованное состояние подключения к проигрывателю, которое используется в PlayerConnectionGUI.ConnectionTargetSelectionDropdown или PlayerConnectionGUILayout.ConnectionTargetSelectionDropdown. Возвращаемый объект состояния подключения содержит информацию о том, какая цель подключена к проигрывателю и какие цели доступны.
Описание
Этот метод создает объект отслеживания состояния для установления и отображения соединения редактора с проигрывателем.
Это состояние и соответствующие методы графического интерфейса (PlayerConnectionGUI.ConnectionTargetSelectionDropdown и PlayerConnectionGUILayout.ionTargetSelectionDropdown ) должны использоваться из EditorWindow. Поставляемое окно редактора используется для:
- Отображать оверлей при подключении
- Перерисовать окно после установления соединения
- Получать обратные вызовы с помощью connectCallback, когда другие окна, использующие тот же тип соединения, устанавливают соединение
Технически можно указать parentWindow как null и использовать его вне EditorWindow, но это не рекомендуется и мы не планируем поддерживать этот вариант использования
Также имейте в виду, что полученное состояние не сериализовано и должно быть удалено. Рекомендуемый шаблон использования — получить состояние в OnEnable EditorWindow и удалить его в OnDisable.
connectedCallback не будет запущен, если, например, соединение было установлено путем автоматического установления соединения профилировщика с проигрывателем или возврата к соединению с редактором. Вместо этого он отвечает только на то, что пользователь активно выбирает цель, и ждет, пока это соединение не будет установлено. Если тип подключения является общим для всех окон редактора, он также будет активирован, когда пользователь выберет его в другом EditorWindow.
В возвращаемом состоянии известно, какая цель в данный момент подключена и какие цели доступны.
using UnityEngine;
using UnityEngine.Profiling;
using UnityEditor;
using UnityEngine.Networking.PlayerConnection;
using UnityEditor.Networking.PlayerConnection;
public class MyWindow : EditorWindow
{
// The state can survive for the life time of the EditorWindow so it's best to store it here and just renew/dispose of it in OnEnable and OnDisable, rather than fetching repeatedly it in OnGUI.
IConnectionState attachProfilerState;
[MenuItem("Window/My Window")]
static void Init()
{
MyWindow window = (MyWindow)GetWindow(typeof(MyWindow));
window.Show();
}
private void OnEnable()
{
// The state of the connection is not getting serialized and needs to be disposed
// Therefore, it's recommended to fetch it in OnEnable and call dispose on it in OnDisable
attachProfilerState = PlayerConnectionGUIUtility.GetConnectionState(this, OnConnected);
}
private void OnConnected(string player)
{
Debug.Log(string.Format("MyWindow connected to {0}", player));
}
private void OnGUI()
{
// Draw a toolbar across the top of the window and draw the drop-down in the toolbar drop-down style too
EditorGUILayout.BeginHorizontal(EditorStyles.toolbar);
PlayerConnectionGUILayout.ConnectionTargetSelectionDropdown(attachProfilerState, EditorStyles.toolbarDropDown);
switch (attachProfilerState.connectedToTarget)
{
case ConnectionTarget.None:
//This case can never happen within the Editor, since the Editor will always fall back onto a connection to itself.
break;
case ConnectionTarget.Player:
Profiler.enabled = GUILayout.Toggle(Profiler.enabled, string.Format("Profile the attached Player ({0})", attachProfilerState.connectionName), EditorStyles.toolbarButton);
break;
case ConnectionTarget.Editor:
// The name of the Editor or the PlayMode Player would be "Editor" so adding the connectionName here would not add anything.
Profiler.enabled = GUILayout.Toggle(Profiler.enabled, "Profile the Player in the Editor", EditorStyles.toolbarButton);
break;
default:
break;
}
EditorGUILayout.EndHorizontal();
}
private void OnDisable()
{
// Remember to always dispose the state!
attachProfilerState.Dispose();
}
}