Unet 联机

关于 Unet 之前只了解个大概,近期做 VR 多人联机。主要参考资料如下:

简书的八节教程 :https://www.jianshu.com/p/b8cc2d15e2b5

一个博客主的系列教程:https://blog.csdn.net/ldy597321444/article/list/7?  

一个客户端和服务器之间能控制同一个物体的案例:https://blog.csdn.net/zhangxiao13627093203/article/details/81026124

插件: SteamVR Network Essentials 这个是基于 Unet 的多人联机的插件。有需要可以留言,还有插件教程也可以一并给。

项目中遇到的一些问题:

  1. 必须都连公司的网,即在一个局域网内,否则不能通讯,更换了网络还是不能连接,建议重启

  2. VR 模式是销毁了原来的 MainCamera,重新生成 Camerarig 预制体

  3. 第三人称利用了博客中 Unet 产生不同玩家,序列化和反序列化数据,修改了 SpawnMessage 中的数据。

  4. 注意使用第三人称,也是一个玩家,实例化出来后判断下如果是本地玩家(OnStartLocalPlayer 中进行设置),才把对应的相机显示出来,否则会在其他客户端上把原有的相机画面遮盖住

  5. 吸取教训:不要看不懂就不想看,多看几遍就能看懂原理,不想看拖得越久,自己越难受,不要拖

  6. VR 联机参考 SteamVR Network Essential 插件,可以看教程,已经下载,主要看 NetworkVRHands 脚本(其中是一些交互的东西),VRPlayerController(是关于授权转移的问题,实现多人操作)。NetworkVRHands 中的 grabbedObject 是从 touchedObject 赋值过来的。细看下代码。

  7. 开始按照教程勾选 IsUsable,is Grabble 还是不能抓到,后来发现是 NetworkVRHands 脚本中检测按键的代码 steamDevice.GetPressUp(SteamVR_Controller.ButtonMask.Trigger) 写成了steamDevice.GetTouchUp(SteamVR_Controller.ButtonMask.Trigger) 这两个效果是不一样的,可以通过网上一些按键脚本进行测试。

  8. 裸眼 3D 效果:目标:2 张 1920,1080 像素的图片在 2 个 960,1080 的图片上展示,即画面进行压缩。做法:两个相机平行,间隔 6 cm, lookat 一个物体,使用两个 RenerTexture ,点开修改 Size 为1920,1080 ,然后两个相机分别拖入两张 RenderTexture,创建 Canvas,Scale With Screen Size 为 1920,1080,创建 2 个 RawImage,大小为 1920,1080,x 的Scale 设置为 0.5,调整位置在 1920,1080 的 Game 窗口铺满,将两张 RenderTexture 分别拖入 RawImage 中的 Texture 中即可。裸眼 3D 设备会将两个 960,1080 的画面拉伸回 1920,1080 的画面。

猜你喜欢

转载自blog.csdn.net/weixin_37608784/article/details/88026995