Unity Editorから同じネットワーク上にいるデバイスのプレイヤーにデータを送る
Unity Editorから同じネットワーク上にいるデバイスのプレイヤーにデータを送る https://t.co/fnpTJV1L9n #きゅぶろぐ pic.twitter.com/6Qcy58acdZ
— きゅぶんず (@kyubuns) March 3, 2024
UnityEditor.Networking.PlayerConnection.EditorConnection とかいうトゲアリトゲナシトゲトゲみたいな名前のAPIを使うとConsole Windowで接続できるリモートデバイスに対してデータを送受信することができます。
これを使えば、文字を打つのが面倒なiOS/Android上に簡単にデバッグコマンドを送ったりできそうですね。
Development Buildでだけ動作します。
以下、Editor側のコードとPlayer側のコード。
ReceiveMessage.cs
using UnityEngine;
using UnityEngine.Networking.PlayerConnection;
using UnityEngine.UI;
public class ReceiveMessage : MonoBehaviour
{
[SerializeField] private Text text;
private void Start()
{
var connection = PlayerConnection.instance;
connection.Register(MyCustomMessageIds.TextMessage, OnReceiveTextMessage);
}
private void OnDestroy()
{
var connection = PlayerConnection.instance;
connection.Unregister(MyCustomMessageIds.TextMessage, OnReceiveTextMessage);
}
private void OnReceiveTextMessage(MessageEventArgs args)
{
var message = System.Text.Encoding.UTF8.GetString(args.data);
text.text = $"{message}\n{text.text}";
}
}
public static class MyCustomMessageIds
{
public static readonly System.Guid TextMessage = System.Guid.Parse("dee5cc30-8107-4c58-a627-33a5943043c1");
}SendMessageToPlayer.cs
using UnityEditor;
using UnityEditor.Networking.PlayerConnection;
using UnityEngine;
public class SendMessageToPlayer : EditorWindow
{
[MenuItem("Tools/Send Message to Player")]
private static void ShowWindow()
{
var window = GetWindow<SendMessageToPlayer>();
window.titleContent = new GUIContent("Send Message To Player");
window.Show();
}
private string _messageToSend = "Hello!";
private void OnEnable()
{
EditorConnection.instance.Initialize();
}
private void OnDisable()
{
EditorConnection.instance.DisconnectAll();
}
private void OnGUI()
{
_messageToSend = EditorGUILayout.TextField("Message:", _messageToSend);
foreach (var connection in EditorConnection.instance.ConnectedPlayers)
{
if (GUILayout.Button($"Send to {connection.name}"))
{
SendTextMessageToPlayer(_messageToSend, connection.playerId);
}
}
}
private void SendTextMessageToPlayer(string message, int playerId)
{
var connection = EditorConnection.instance;
var bytes = System.Text.Encoding.UTF8.GetBytes(message);
connection.Send(MyCustomMessageIds.TextMessage, bytes, playerId);
}
}追記
すぐに試せるようにパッケージも作ってみました。
github.comkyubuns/DebugCommandExecutor