您當前的位置:首頁 > 攝影

Unity的遊戲觀戰功能 求大佬指教?

作者:由 Mack 發表于 攝影時間:2023-01-25

Unity的遊戲觀戰功能 求大佬指教?Mack2023-01-25 10:13:17

我自己的想法是在服務端用EZReplayManager外掛錄製回放,EZReplayManager外掛錄製回放的時候貌似會產生一個預製體會記錄攝像機的位置資訊 我的想法是把服務端這個預製體存在XML檔案裡 在從客戶端解析出來 不知道可不可行

Unity的遊戲觀戰功能 求大佬指教?2018-05-30 15:17:10

這個外掛我不是很瞭解,是錄製「影片」然後回放嗎?這要考慮影片檔案的大小了。

一般做法會將戰鬥資料儲存下來,客戶端重新執行一遍達到回放的目的。

狀態同步的遊戲需要單獨的戰鬥資料解析回放;幀同步就容易很多了,再跑一遍戰鬥即可。

Unity的遊戲觀戰功能 求大佬指教?2018-06-02 07:50:14

很久之前,策劃的腦洞開到了圍觀戰鬥上,於是我就做了一點關於觀戰的調研。

觀戰

觀戰從實效性上可以分為兩類

實時觀戰

非實時觀戰

這兩個的實現方式是很大不同的,適用於的遊戲型別也不同。

實時觀戰

就好比現實社會中的圍觀打架,只有在現場的人才能看到。

其實MMOARPG天生就帶實時觀戰功能,比如在我面前的兩個人PK,我就是觀戰者。

這裡是依賴MMOARPG伺服器的訊息廣播機制,它會把我視野範圍(AOI)內的所有事件都廣播給我。

那麼問題來了,怎麼做不在視野範圍內的圍觀呢?

比如,競技場副本里的戰鬥,只有兩個人參與,但是想讓整個伺服器裡的人都看到。

大致思路就是,在副本里放一個特殊的觀戰代理機器人,它是虛擬的,只負責管理觀戰的AOI列表和廣播戰鬥訊息

伺服器將當前的賽場上人員的狀態廣播給代理,代理稍微做些處理,然後廣播給它自己AOI列表裡的人。

當一個玩家需要觀戰時,把它新增到代理的AOI裡,然後代理AOI給這個玩家傳送參戰人員的當前狀態,比如血,藍,技能資訊等等,客戶端透過這些資訊就能還原出來兩個人。

這樣基本上就能實現實時觀戰,而且觀戰的人數不會影響到戰鬥的人,在代理機器人後面,再加點負載均衡的策略,理論上可以做到無限人數的圍觀。

以上都是基於服務端的,那客戶端需要做的事兒就很少了。

客戶端只需要像原來一樣處理服務端的廣播訊息就可以了。

實時觀戰最適合狀態同步型別的MMOARPG,其他型別的遊戲不做實時的也能滿足需求。

非實時觀戰

這種方式又叫“戰鬥回放”,不再受時間的影響,可以隨時去檢視完整的戰鬥資訊。

這種方式適用於幀同步型別的即時策略遊戲,比如,LOL,王者榮耀。

做法有兩種

基於操作序列的回放

錄製影片回放

基於操作序列的回放

這個應該是主流的做法,優點是資料量小,不僅僅是用到回放上,還能做作弊檢查。

操作序列裡記錄的內容包含

初始狀態,戰場裡每個人的基礎屬性

戰場的初始狀態,比如隨機數等等

每個人的輸入指令,比如移動資訊,技能釋放資訊

客戶端要做的事情比較多,首先要做到戰鬥邏輯和表現要完全分離,

基於上面的資訊,能還原一場戰鬥。

它的缺點,要做版本的相容。比如戰鬥相關的配置資訊被修改了,戰鬥的邏輯修改了。這些都是需要考慮的內容。

錄製影片回放

這就是題主提到的方式,EZReplayManager是個Unity外掛,沒用過不是很瞭解,大概原理和錄製影片差不多,只是更適合Unity。它透過記錄相機內每個Object的資訊,來還原整個場景,這個資料量應該是巨大的,一場戰鬥下來,就好比錄製了一個大型的動畫檔案。

這種方式的核心問題就是資料量太大,如果解決了這個問題,這種方案也是種好方案。

而且,現在有很多第三方提供了影片錄製回放的sdk。如果只是單純的想讓玩家看到回放,這也是個方案。

其他

翻了一下其他答案的評論,原來題主想要實現的是

想做一個類似於刺激戰場死亡之後可以觀戰隊員的畫面

這個就是實時觀戰,只需要去關注隊友的AOI資訊,就能實現切換到隊友的視角。大部分工作應該是伺服器在做。客戶端只需要跟隨隊友,就做一些特殊處理就可以了。去找服務端PK一下吧。

Unity的遊戲觀戰功能 求大佬指教?2018-06-02 13:01:28

幀同步還是狀態同步?

對於幀同步,回放算是天生支援,缺陷是快進要做好比較難。

狀態同步主要是沒有通用的做法。關鍵點有幾個,對時,視野管理,定期記錄snapshpt。如果你們已經有類似觀戰的系統,那麼在那個基礎上改還是挺快的。

- 對時不說了,肯定要建立一套客戶端伺服器統一的時間管理的,這個主要是和幀同步不同,幀同步客戶端伺服器時間軸天生是統一的。

- 定期記錄snapshot主要是實現快放需要,否則就只能像幀同步那樣根據訊息包一個個計算到你要快放的時間點的狀態了。

- 視野管理比較麻煩。你們需求裡是要錄全域性、回放全域性,還是針對每個玩家的行為單獨錄製回放?PUBG是針對每個玩家錄和回放的,相對簡單一些,只用伺服器針對每個玩家記錄自己視野內的訊息再在客戶端回放即可。要求全域性回放的話,我們嘗試過的是伺服器記錄整局的訊息,然後回放時候根據選定的角色在客戶端模擬伺服器的視野管理來做訊息剔除。不過我們只做到demo,後面專案黃了沒深入。

雖然不是直接相關,Overwatch的死亡回放技術分享上提到很多思路值得參考,另外他們也提到基於幀同步的,最後錄影的容量會是很大的負擔。

另外回放還要面對的問題是版本升級後的相容問題,這個只要版本內容變化太多基本無解。

那個EZReplay外掛沒有用過

標簽: 回放  觀戰  客戶端  同步  戰鬥