处理从 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 | 取消注册断开连接回调。 |
instance | Gets the instance of the Singleton. Unity creates the Singleton instance when this property is accessed for the first time. If you use the FilePathAttribute, then Unity loads the data on the first access as well. |
GetInstanceID | Gets the instance ID of the object. |
ToString | 返回对象的名称。 |
Save | Saves the current state of the ScriptableSingleton. |
Destroy | 移除 GameObject、组件或资源。 |
DestroyImmediate | 立即销毁对象 /obj/。强烈建议您改用 Destroy。 |
DontDestroyOnLoad | 在加载新的 Scene 时,请勿销毁 Object。 |
FindAnyObjectByType | Retrieves any active loaded object of Type type. |
FindFirstObjectByType | Retrieves the first active loaded object of Type type. |
FindObjectOfType | 返回第一个类型为 type 的已加载的激活对象。 |
FindObjectsByType | Retrieves a list of all loaded objects of Type type. |
FindObjectsOfType | Gets a list of all loaded objects of Type type. |
Instantiate | 克隆 original 对象并返回克隆对象。 |
CreateInstance | 创建脚本化对象的实例。 |
GetFilePath | Get the file path where this ScriptableSingleton is saved to. |
bool | 该对象是否存在? |
operator != | 比较两个对象是否引用不同的对象。 |
operator == | 比较两个对象引用,判断它们是否引用同一个对象。 |