// Assets/Script/Editor/MessageChannelEditor.cs using Unity.RenderStreaming; using UnityEditor; using UnityEngine; namespace RenderStreaming.Editor { [CustomEditor(typeof(MessageChannel))] public class MessageChannelEditor : UnityEditor.Editor { private Vector2 _scrollPos; private bool _showHistory = true; private bool _showStats = true; public override void OnInspectorGUI() { DrawDefaultInspector(); var channel = (MessageChannel)target; EditorGUILayout.Space(10); // --- 连接状态 --- EditorGUILayout.BeginVertical("HelpBox"); EditorGUILayout.LabelField("连接状态", EditorStyles.boldLabel); EditorGUI.indentLevel++; EditorGUILayout.LabelField("Channel Label", channel.Label); EditorGUILayout.LabelField("Connection ID", channel.ConnectionId ?? "未连接"); var stateContent = channel.IsConnected ? new GUIContent("● 已连接", EditorGUIUtility.FindTexture("greenCheck")) : new GUIContent("○ 未连接"); if (channel.IsConnected) GUI.color = Color.green; else GUI.color = Color.gray; EditorGUILayout.LabelField( stateContent); GUI.color = Color.white; EditorGUI.indentLevel--; EditorGUILayout.EndVertical(); EditorGUILayout.Space(5); // --- 统计信息 --- if (_showStats) { EditorGUILayout.BeginVertical("HelpBox"); _showStats = EditorGUILayout.BeginToggleGroup("统计信息", _showStats); EditorGUI.indentLevel++; EditorGUILayout.LabelField("收到消息总数", channel.ReceivedMessageCount.ToString()); EditorGUILayout.LabelField("历史记录数", channel.MessageHistory.Count.ToString()); EditorGUI.indentLevel--; EditorGUILayout.EndToggleGroup(); EditorGUILayout.EndVertical(); } EditorGUILayout.Space(5); // --- 消息历史 --- EditorGUILayout.BeginVertical("HelpBox"); _showHistory = EditorGUILayout.Foldout(_showHistory, "消息历史", true, EditorStyles.boldLabel); if (_showHistory) { var history = channel.MessageHistory; if (history == null || history.Count == 0) { EditorGUILayout.HelpBox("暂无消息记录", MessageType.Info); } else { _scrollPos = EditorGUILayout.BeginScrollView( _scrollPos, GUILayout.MinHeight(120), GUILayout.MaxHeight(300)); for (int i = history.Count - 1; i >= 0; i--) { var msg = history[i]; // 交替背景色 if (i % 2 == 0) { var bg = new GUIStyle("CN EntryBackEven"); EditorGUILayout.BeginVertical(bg); } else { EditorGUILayout.BeginVertical(); } // 方向标签 + 时间 EditorGUILayout.BeginHorizontal(); var dirIcon = msg.isSent ? "▶ 发送" : "◀ 接收"; var dirStyle = msg.isSent ? new GUIStyle(EditorStyles.label) { normal = { textColor = new Color(0.3f, 0.6f, 1f) } } : new GUIStyle(EditorStyles.label) { normal = { textColor = new Color(1f, 0.7f, 0.2f) } }; EditorGUILayout.LabelField(dirIcon, dirStyle, GUILayout.Width(60)); EditorGUILayout.LabelField(msg.timestamp, GUILayout.Width(70)); //EditorGUILayout.LabelField(msg.connectionId, EditorStyles.miniLabel); EditorGUILayout.EndHorizontal(); // 消息内容 EditorGUILayout.SelectableLabel(msg.type, EditorStyles.wordWrappedLabel, GUILayout.Height(EditorStyles.wordWrappedLabel.CalcHeight( new GUIContent(msg.type), EditorGUIUtility.currentViewWidth - 40))); EditorGUILayout.EndVertical(); EditorGUILayout.Space(2); } EditorGUILayout.EndScrollView(); } // 清除按钮 EditorGUILayout.Space(5); GUI.backgroundColor = new Color(1f, 0.5f, 0.5f); if (GUILayout.Button("清除消息记录", GUILayout.Height(25))) { Undo.RecordObject(channel, "Clear Message History"); channel.ClearHistory(); EditorUtility.SetDirty(channel); } GUI.backgroundColor = Color.white; } EditorGUILayout.EndVertical(); // 持续刷新 Inspector(消息实时到达时自动更新) if (Application.isPlaying && channel.IsConnected) { Repaint(); } } } }