Unity3D android USB通讯
Unity3D android USB communication
我有一个 android 应用程序(在 Unity 中制作),我想从 USB 电缆(插入我的电脑)接收数据
有什么想法吗?
我的第一个想法是我有一个应用程序(在 android 工作室中创建通信,然后发送一些数据与播放器设置统一)。
我发现 System.IO.Ports 不适用于 android 所以我需要你的帮助!
我能想到的最佳方法是在您的计算机和应用程序之间创建 TCP 连接,并使用该 TCP 连接实际发送和接收数据。如果您有兴趣,我可以指导您实现它的方向。
编辑:
您可以在您的统一项目中创建一个 TCP 侦听器,如下所示:-
int port = 8181;
TcpListener listener = null;
public void Awake()
{
DontDestroyOnLoad(gameObject);
StartCoroutine(Listen());
}
private IEnumerator Listen()
{
listener = new TcpListener(System.Net.IPAddress.Any, port);
// start listening
listener.Start();
listener.BeginGetContext(ListenerCallback, listener);
}
public void ListenerCallback(IAsyncResult result)
{
HttpListener listener = (HttpListener)result.AsyncState;
// Call EndGetContext to complete the asynchronous operation.
HttpListenerContext context = listener.EndGetContext(result);
HttpListenerRequest request = context.Request;
//do your response-handling logic here
listener.BeginGetContext(ListenerCallback, listener);
}
在您的第一个开始场景加载这个游戏对象。
而不是简单地在 eclispe 中创建一个 Java 项目并使用 Socket 连接到 运行 服务器。
像这样:
private Socket _socket = null;
public void conenct()
{
_socket = new Socket(deviceIpAddress, SERVER_PORT);
}
public JSONObject read()
{
BufferedReader inFromServer = new BufferedReader(new InputStreamReader (_socket.getInputStream()));
StringBuilder responseStrBuilder = new StringBuilder();
JSONObject jsonObject = null;
_socket.setSoTimeout(10000);
try
{
for (int b = 0; ((b = inFromServer.read()) >= 0);)
{
// Break on New Line character
if (b == NEW_LINE.charAt(0))
{
break;
}
responseStrBuilder.append((char)b);
}
// Unity Server Ack response on socket connection
if (responseStrBuilder.length() == 0)
{
responseStrBuilder.append("{}");
}
jsonObject = new JSONObject(responseStrBuilder.toString());
return (jsonObject);
}
public void write(String msg)
{
PrintWriter outToServer = new PrintWriter(new OutputStreamWriter(_socket.getOutputStream()));
//send msg to server and include new line character
outToServer.print(msg + NEW_LINE.charAt(0));
outToServer.flush();
}
您可以使用Read读取unity发送过来的数据,Write向unity服务器发送请求。
你可以根据需要修改这个。
我做的很匆忙,所以可能会有一些错误。试一试。
我有一个 android 应用程序(在 Unity 中制作),我想从 USB 电缆(插入我的电脑)接收数据
有什么想法吗?
我的第一个想法是我有一个应用程序(在 android 工作室中创建通信,然后发送一些数据与播放器设置统一)。
我发现 System.IO.Ports 不适用于 android 所以我需要你的帮助!
我能想到的最佳方法是在您的计算机和应用程序之间创建 TCP 连接,并使用该 TCP 连接实际发送和接收数据。如果您有兴趣,我可以指导您实现它的方向。
编辑: 您可以在您的统一项目中创建一个 TCP 侦听器,如下所示:-
int port = 8181;
TcpListener listener = null;
public void Awake()
{
DontDestroyOnLoad(gameObject);
StartCoroutine(Listen());
}
private IEnumerator Listen()
{
listener = new TcpListener(System.Net.IPAddress.Any, port);
// start listening
listener.Start();
listener.BeginGetContext(ListenerCallback, listener);
}
public void ListenerCallback(IAsyncResult result)
{
HttpListener listener = (HttpListener)result.AsyncState;
// Call EndGetContext to complete the asynchronous operation.
HttpListenerContext context = listener.EndGetContext(result);
HttpListenerRequest request = context.Request;
//do your response-handling logic here
listener.BeginGetContext(ListenerCallback, listener);
}
在您的第一个开始场景加载这个游戏对象。 而不是简单地在 eclispe 中创建一个 Java 项目并使用 Socket 连接到 运行 服务器。
像这样:
private Socket _socket = null;
public void conenct()
{
_socket = new Socket(deviceIpAddress, SERVER_PORT);
}
public JSONObject read()
{
BufferedReader inFromServer = new BufferedReader(new InputStreamReader (_socket.getInputStream()));
StringBuilder responseStrBuilder = new StringBuilder();
JSONObject jsonObject = null;
_socket.setSoTimeout(10000);
try
{
for (int b = 0; ((b = inFromServer.read()) >= 0);)
{
// Break on New Line character
if (b == NEW_LINE.charAt(0))
{
break;
}
responseStrBuilder.append((char)b);
}
// Unity Server Ack response on socket connection
if (responseStrBuilder.length() == 0)
{
responseStrBuilder.append("{}");
}
jsonObject = new JSONObject(responseStrBuilder.toString());
return (jsonObject);
}
public void write(String msg)
{
PrintWriter outToServer = new PrintWriter(new OutputStreamWriter(_socket.getOutputStream()));
//send msg to server and include new line character
outToServer.print(msg + NEW_LINE.charAt(0));
outToServer.flush();
}
您可以使用Read读取unity发送过来的数据,Write向unity服务器发送请求。 你可以根据需要修改这个。
我做的很匆忙,所以可能会有一些错误。试一试。