unity3D__利用Http收发消息

网络说难不难,说简单不简单  其实  在x项目开始的时候就应该定好.

一开始协商好协议   后期真的会省好多事  

 

 

项目刚开始  上面都没讲    盲目的去做

开始给自己挖了一个大坑   真是  欲哭无泪 

一般而言  游戏服务器  大多都是需要在服务器上去跑一套程序  小游戏就无所谓了   

本项目的服务器是用PHP跑的   形式跟网页一样  

萌新 开始觉得 没什么   网上不是有教程吗  然后就开始了踏坑之路

wwwform  类   可以处理上传数据表  但是 不知道怎么处理header   也就是说  表 跟header不能同时去传送  

想传送 可以  必须用流的形式去传信息  就不能用formdate    晕了  真是有种想死的冲动  

我换了unitywebrequst    用post去传   结果  也是  还久没看API了  看的时候还是

大眼一扫  没有需要的就直接过   其实忽略了一个重点  

unitywebrequster   这是个新的  里面好像有5个重载  大眼一看就能明白的   直接掠过吧   你就看那个不明白的   传值 有一个是列表的那个   重点看一下  

header  这个  可以这样去做  unitywebrequster.setrequsterHeader (string name,string value)   加入需要设置的header就一个的 话  直接添加就可以   如果多个   可以再点出来这个函数  继续添加     到此  你会遇到一个问题  就是你再登录的时候  会提示你设置的header有问题   尤其是 Oringin     好像是跨域的问题   搞了半天  没解决   果断弃用这个  

bestHttp   这真是一个非常好用的插件  

简单易用  兼容性很好  可以全平台支持  

本来只是想说下想法  不贴代码  但是  为了能帮到别人 还是详细点吧 

using BestHTTP;
using LitJson;
using BestHTTP.Statistics;
using BestHTTP.Cookies;

 

HTTPRequest hTTP = new HTTPRequest(new Uri(login_url),HTTPMethods.Post, OnRequestFinished);

                                                                                   这个是地址  这个是发送消息的方式    这个是方法的回调

TP.AddField("LoginForm[username]", prompt.ID);
hTTP.AddField("LoginForm[password]", prompt.Password);

hTTP.AddField("ajax","login-form");

        hTTP.SetHeader("Origin", "http://localhost");       //这个是设置的header
        hTTP.SetHeader("X-Requested-With", "XMLHttpRequest"); //这个有特殊设置的header

        hTTP.IsCookiesEnabled = true;    //这个是用来设置cookie   为true的时候  会自动处理
        
        yield return hTTP.Send();   

  void OnRequestFinished(HTTPRequest request, HTTPResponse response)

{

response.DataAsText;  这个是   发送消息返回的信息   可以直接打印出来

 

}

  到此   告一段落  
 

     

 

 

 

 

 

 

### 上位机与Unity3D的通信和交互方式 在实际应用中,上位机通常作为控制中心或数据处理单元,而Unity3D则负责可视化展示或模拟功能。两者之间的通信可以通过多种方式进行实现。 #### 1. **串口通信** Unity3D可以利用C#中的`System.IO.Ports.SerialPort`类库来完成与上位机的串口通信。这种方式适用于需要实时传输少量数据的应用场景,例如传感器数据采集[^3]。 下面是一个简单的代码示例,展示了如何在Unity3D中读取来自上位机的串口数据: ```csharp using System.IO.Ports; using UnityEngine; public class SerialCommunication : MonoBehaviour { private SerialPort serialPort; void Start() { serialPort = new SerialPort("COM3", 9600); // 设置串口号和波特率 serialPort.Open(); } void Update() { if (serialPort.IsOpen && serialPort.BytesToRead > 0) { string data = serialPort.ReadLine(); // 读取一行数据 Debug.Log(data); } } void OnDestroy() { if (serialPort != null && serialPort.IsOpen) { serialPort.Close(); } } } ``` #### 2. **网络通信(TCP/UDP协议)** 如果上位机和Unity3D运行在同一局域网内,则可以选择基于TCP/IP或UDP协议的网络通信方法。这种方法适合于大数据量传输以及分布式系统的应用场景[^4]。 这里提供了一个基本的客户端-服务器架构下的TCP通信例子: - 客户端(Unity3D部分) ```csharp using System.Net.Sockets; using System.Text; using UnityEngine; public class TCPClientExample : MonoBehaviour { TcpClient client; NetworkStream stream; void Start() { client = new TcpClient("localhost", 8080); // 配置IP地址和端口号 stream = client.GetStream(); byte[] buffer = Encoding.UTF8.GetBytes("Hello from Unity!"); stream.Write(buffer, 0, buffer.Length); int bytes = stream.Read(buffer, 0, buffer.Length); string response = Encoding.UTF8.GetString(buffer, 0, bytes); Debug.Log(response); } void OnDestroy() { if (stream != null) stream.Close(); if (client != null) client.Close(); } } ``` #### 3. **WebSocket技术** WebSocket是一种全双工通信协议,特别适合实现实时更新的功能,比如在线监控系统或者多人协作平台。对于自动化仓库这样的复杂环境来说,WebSocket能够很好地满足其需求[^2]。 实现步骤大致如下: - 在服务端搭建支持WebSocket的服务; - 在Unity3D项目中引入第三方库(如SocketIO),并编写相应的收发消息逻辑。 --- ### 总结 以上介绍了三种常见的上位机与Unity3D之间建立联系的方式——分别是通过串口、网络接口以及WebSocket来进行数据交换。每种方案都有各自的特点及适用范围,请依据具体的业务背景选取最合适的手段加以实施。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值