【问题标题】:Unity3D android USB communicationUnity3D安卓USB通讯
【发布时间】:2018-05-23 06:50:35
【问题描述】:

我有一个 Android 应用(使用 Unity 制作),我想从 USB 电缆(插入我的电脑)接收数据

请给点意见?

我的第一个想法是我有一个应用程序(在 android studio 中创建通信,然后通过播放器设置将一些数据发送到 unity)。

我发现 System.IO.Ports 不适用于 android,所以我需要您的帮助!

【问题讨论】:

    标签: c# unity3d usb


    【解决方案1】:

    我能想到的在您的计算机和应用程序之间创建 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 服务器发送请求。 您可以根据需要进行修改。

    我这样做很匆忙,所以可能会有一些错误。试一试。

    【讨论】:

    • 谢谢!如果你能给我更多的细节,那就太好了!
    • 这不行,你不能通过 USB 创建 TCP 套接字
    猜你喜欢
    • 2011-04-04
    • 2012-06-15
    • 2012-02-16
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多