您的位置:首页 > 移动开发 > Unity3D

unity加kinect2.0拍照和利用RPC图片传输制作照片墙问题

2015-08-24 16:11 567 查看
拍照问题上周六解决了,就是获取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<NetworkView>().RPC("RequestMessage2", RPCMode.All, inputMessage);

参数一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的时候有新的系统了,高于换个版本的注意可以试试了

好像提供的方法很多,还能从底层操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: