Unity 6.3
0 онлайн 65 гостей 3 в системе
Вход

PlayerConnectionGUIUtility.GetConnectionState

Declaration

public static Networking.PlayerConnection.IConnectionState GetConnectionState(EditorWindow parentWindow, Action<string> connectedCallback);

Параметры

Параметр Описание
parentWindow EditorWindow, которые будут использовать подключение.
connectedCallback Обратный вызов, который запускается при каждой успешной попытке подключения, инициированной пользователем.

Возвращаемое значение

IConnectionState Возвращает несериализованное состояние подключения к плееру, которое используется в PlayerConnectionGUI.ConnectionTargetSelectionDropdown или PlayerConnectionGUILayout.ConnectionTargetSelectionDropdown. Возвращаемый объект состояния подключения содержит сведения о том, какой объект подключён к плееру и какие объекты доступны.

Описание

Этот метод создаёт объект отслеживания состояния для установки и отображения соединения редактора с плеером.

Это состояние и соответствующие методы GUI (PlayerConnectionGUI.ConnectionTargetSelectionDropdown и PlayerConnectionGUILayout.ConnectionTargetSelectionDropdown) предназначены для использования изнутри EditorWindow. Предоставленное Окно Редактора используется для: 1. Отображения накладки во время подключения 2. Перекраски окна после установления соединения 3. Получения вызовов обратного вызова через connectedCallback, когда другие окна, использующие тот же тип соединения, устанавливают соединение Технически, возможно предоставить 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(); } }