拍照问题上周六解决了,就是获取kinect的彩色图片,然后转换成texture2D即可
然后是图片传输问题,因为要求每个电脑装个kinect2.0,而且每个电脑开一个客户端,
然后一个服务端是照片墙功能,所以要求照片墙的那个做服务器,来处理接受的图片
这里遇到的主要问题就是如何传图片
一开始想到了socket,但是想到整这个就感觉会很复杂,
所以想用unity里自带的来解决些问题
当然之后就顺利成章的遇到了RPC
RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
RPC其实也是一种C/S的编程模式,有点类似C/SSocket编程模式,但要比它更高一层。当我们在建立RPC服务以后,客户端的调用参数通过底层的RPC传输通道,可以是UDP,也可以是TCP(也即TI-RPC—无关性传输),并根据传输前所提供的目的地址及RPC上层应用程序号转至相应的RPC Application Porgramme Server
RPC定义
[RPC]
void RequestMessage2(string message, NetworkMessageInfo info)
{
//message网络请求发送的内容,这个可以自己处理
//NetworkMessageInfo保持了谁发送这个RPC的细节 这个之前的参数个数以及参数类型必须与执行RPC时的参数一致 可以是string byte[] 等等 NetworkMessageInfo可以不写这个参数
Message += "\n" + "发送者" + info.sender + ":" + message;
}
调用RPC
GetComponent
参数一RequestMessage2是接受消息的方法,该方法上必须要有RPC标识
参数二RPCMode发送模式 有
Server向服务器发送
Others发送除了自己之外的每个客户端(包括服务端)
OtherBuffered
ALL
ALLBuffered
参数三inputMessage 必须与RPC定义函数的第一个参数类型一致
然后写的时候在服务端和客户端 都要定义相同的RPC函数
然后就可以进行发送了
首先需要将texture2d转换成byte[]形式,用了个偷懒的方法,因为直接读图片就是byte[]形式 所以就用这个测试了
byte[] imageData = File.ReadAllBytes("x:/x.png");
然后发送byte[]数据
服务端接收后直接encode到png赋在物体材质贴图就可以了
需要注意的是本地发送图片和encode都很快
但是局域网就很慢了,需要延迟encode和赋予物体,不然贴图就是问号了
提供些解决方案的链接,我就是从中得到启发的
http://answers.unity3d.com/questions/758155/send-texture-over-network.html
http://answers.unity3d.com/questions/190340/how-can-i-send-a-render-texture-over-the-network.html
http://answers.unity3d.com/questions/54424/sending-bulk-data-via-rpc.html
http://answers.unity3d.com/questions/159109/sending-array-over-the-network-and-onserializenetw.html
http://answers.unity3d.com/questions/829757/how-do-i-send-an-array-over-the-network.html
http://answers.unity3d.com/questions/142751/streaming-textures-possible.html
http://forum.unity3d.com/threads/unity5-beta-webgl-unity-websockets-plug-in.277567/
另外RPC方法其实过时了,在unity5.1的时候有新的系统了,高于换个版本的注意可以试试了
好像提供的方法很多,还能从底层操作