// Assets/Script/WebRtc/SignalingMessageHelper.cs using System; using System.Reflection; using UnityEngine; namespace Unity.RenderStreaming { public static class SignalingMessageHelper { private static object _webSocketSignaling; private static MethodInfo _sendRawMessageMethod; static SignalingMessageHelper() { Initialize(); } private static void Initialize() { try { var signalingManager = GameObject.FindObjectOfType(); if (signalingManager == null) { Debug.LogWarning("SignalingMessageHelper: 找不到 SignalingManager"); return; } var managerInternalField = typeof(SignalingManager).GetField("m_instance", BindingFlags.NonPublic | BindingFlags.Instance); var managerInternal = managerInternalField.GetValue(signalingManager); if (managerInternal == null) { Debug.LogWarning("SignalingMessageHelper: SignalingManager 内部实例为空"); return; } var signalingField = managerInternal.GetType().GetField("_signaling", BindingFlags.NonPublic | BindingFlags.Instance); _webSocketSignaling = signalingField.GetValue(managerInternal); if (_webSocketSignaling == null) { Debug.LogWarning("SignalingMessageHelper: WebSocketSignaling 实例为空"); return; } _sendRawMessageMethod = _webSocketSignaling.GetType().GetMethod("SendMessage"); if (_sendRawMessageMethod == null) Debug.LogWarning("SignalingMessageHelper: 找不到 SendRawMessage 方法"); } catch (Exception e) { Debug.LogError($"SignalingMessageHelper 初始化失败: {e.Message}"); } } public static bool SendMessage(string message) { if (_webSocketSignaling == null || _sendRawMessageMethod == null) { Debug.LogError("SignalingMessageHelper 未正确初始化,请确保 WebSocketSignaling 已启动"); return false; } try { _sendRawMessageMethod.Invoke(_webSocketSignaling, new[] { message }); Debug.Log("消息已发送到服务端"); return true; } catch (Exception e) { Debug.LogError($"发送消息失败: {e.Message}"); return false; } } public static bool IsReady() { return _webSocketSignaling != null && _sendRawMessageMethod != null; } } }