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的时候有新的系统了,高于换个版本的注意可以试试了
好像提供的方法很多,还能从底层操作
然后是图片传输问题,因为要求每个电脑装个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的时候有新的系统了,高于换个版本的注意可以试试了
好像提供的方法很多,还能从底层操作
相关文章推荐
- Unity3D Optimizing Graphics Performance for iOS
- Unity3D - 图形性能优化
- 想在Unity中写串口程序,发现找不到System.IO.Ports
- unity3d 脚本的一些简单介绍
- Unity3D中脚本的执行顺序和编译顺序
- Unity3D游戏开发之详解 Animation类和Animator类
- Unity换装之分离元素
- unity中 拖拽任意的对象
- Unity换装之合并网格
- Unity模拟考题之Unity Certified Professional(专业能力认证)
- Unity模拟考题之Unity Certified User(应用能力认证)
- 【Unity 3D 性能优化 之 一】ParticleSyetem 的alive
- Unity3d_Unity3d"Library\UnityAssemblies\UnityEngine.xml"is denied错误解决方法
- Unity_UNity导出Android工程
- Unity插件之Kolmich(教你如何快速搭建一个完整的小地图)
- Unity3D 4.x 使用Mecanim实现动画控制
- Unity3D实现DoubleClick的一种方法
- unity, 慎用DontDestroyOnLoad
- Unity优化大全(二)之CPU-DrawCall- Batching
- Unity_在Unity不同工程之间导出导入资源的方法