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 的畫面。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章