处理从 Editor 到 Player 的连接。
设置事件以连接到 Player 并向其发送数据。
这是一个单例类,可使用 EditorConnection.instance 进行访问。
这只能用于从 MonoBehaviour、Object 或 ScriptableObject 继承的类。
在 Build Settings 中设置“Autoconnect Profiler”,或者通过 BuildPipeline 代码构建 Player 并使用构建选项BuildOptions.ConnectToHost 和 BuildOptions.Development 来初始化连接。
Player ID 用于区分多个连接的 Player。默认情况下,数据将发送到所有 Player。已连接 Player 的 ID 在下次连接时不一定相同。
using System; using UnityEngine; using UnityEditor; using System.Text; using UnityEditor.Networking.PlayerConnection; using UnityEngine.Networking.PlayerConnection;
public class EditorConnectionExample : EditorWindow { public static readonly Guid kMsgSendEditorToPlayer = new Guid("EXAMPLEGUID"); public static readonly Guid kMsgSendPlayerToEditor = new Guid("EXAMPLEGUID");
[MenuItem("Test/EditorConnectionExample")] static void Init() { EditorConnectionExample window = (EditorConnectionExample)EditorWindow.GetWindow(typeof(EditorConnectionExample)); window.Show(); window.titleContent = new GUIContent("EditorConnectionExample"); }
void OnEnable() { EditorConnection.instance.Initialize(); EditorConnection.instance.Register(kMsgSendPlayerToEditor, OnMessageEvent); }
void OnDisable() { EditorConnection.instance.Unregister(kMsgSendPlayerToEditor, OnMessageEvent); EditorConnection.instance.DisconnectAll(); }
private void OnMessageEvent(MessageEventArgs args) { var text = Encoding.ASCII.GetString(args.data); Debug.Log("Message from player: " + text); }
void OnGUI() { var playerCount = EditorConnection.instance.ConnectedPlayers.Count; StringBuilder builder = new StringBuilder(); builder.AppendLine(string.Format("{0} players connected.", playerCount)); int i = 0; foreach (var p in EditorConnection.instance.ConnectedPlayers) { builder.AppendLine(string.Format("[{0}] - {1} {2}", i++, p.name, p.playerId)); } EditorGUILayout.HelpBox(builder.ToString(), MessageType.Info);
if (GUILayout.Button("Send message to player")) { EditorConnection.instance.Send(kMsgSendEditorToPlayer, Encoding.ASCII.GetBytes("Hello from Editor")); } } }
ConnectedPlayers | 连接的播放器的列表。 |
DisconnectAll | 断开编辑器与播放器之间所有激活的连接。 |
Initialize | 初始化 EditorConnection。 |
Register | 对特定消息 ID 注册回调。 |
RegisterConnection | 注册一个回调,当新 Player 连接到 Editor 时执行。 |
RegisterDisconnection | 当 Player 断开连接时,对该 Player 注册回调。 |
Send | 将数据发送到连接的播放器。 |
TrySend | 尝试将数据从编辑器发送给连接的播放器。 |
Unregister | 取消注册已注册的回调。 |
UnregisterConnection | 取消注册连接回调。 |
UnregisterDisconnection | 取消注册断开连接回调。 |
GetInstanceID | 返回对象的实例 ID。 |
ToString | 返回对象的名称。 |
Destroy | 移除 GameObject、组件或资源。 |
DestroyImmediate | 立即销毁对象 /obj/。强烈建议您改用 Destroy。 |
DontDestroyOnLoad | 在加载新的 Scene 时,请勿销毁 Object。 |
FindObjectOfType | 返回第一个类型为 type 的已加载的激活对象。 |
FindObjectsOfType | 返回所有类型为 type 的已加载的激活对象的列表。 |
Instantiate | 克隆 original 对象并返回克隆对象。 |
CreateInstance | 创建脚本化对象的实例。 |
bool | 该对象是否存在? |
operator != | 比较两个对象是否引用不同的对象。 |
operator == | 比较两个对象引用,判断它们是否引用同一个对象。 |