rect | 绘制下拉选单按钮的位置。 |
state | 显示下拉选单的 EditorWindow 中使用的连接状态。使用 EditorGUIUtility.GetAttachToPlayerState 获取 OnEnable 中的状态,并记住在 OnDisable 中处置该状态。 |
style | 定义绘制下拉选单按钮时应采用的 GUIStyle。如果未指定样式,则将绘制默认下拉选单按钮。 |
显示下拉选单按钮和菜单,供用户选择并建立与播放器的连接。
此控件与 Profiler 窗口、Frame Debugger 或 Console 窗口的工具栏中使用的控件相同。下拉选单将列出您的编辑器可以连接并且可被发现的所有可用播放器和编辑器。还提供直接连接到 IP 地址的条目。
您需要提供 EditorWindow 使用的连接状态。要获取此状态,请使用 OnEnable 中的 EditorGUIUtility.GetAttachToPlayerState 并记住在使用该状态的 EditorWindow 的 OnDisable 中处置该状态。
此类是实验性的,因为它目前仅适用于性能分析工具和控制台所使用的连接。在未来版本中,此类将使用 PlayerConnection。
using UnityEngine; using UnityEngine.Profiling; using UnityEditor; using UnityEngine.Experimental.Networking.PlayerConnection; using PlayerConnectionGUI = UnityEditor.Experimental.Networking.PlayerConnection.EditorGUI; using PlayerConnectionGUIUtility = UnityEditor.Experimental.Networking.PlayerConnection.EditorGUIUtility;
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.GetAttachToPlayerState(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); var rect = GUILayoutUtility.GetRect(100, EditorGUIUtility.singleLineHeight, EditorStyles.toolbarDropDown); PlayerConnectionGUI.AttachToPlayerDropdown(rect, 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 of the state! attachProfilerState.Dispose(); } }
另请参阅 EditorGUI.AttachToPlayerDropdown(了解有关自动布局的信息)以及 EditorGUIUtility.GetAttachToPlayerState 和 IConnectionState(了解有关此 UI 控件的状态处理的详细信息)。