1. 程式人生 > >基於Unity的遊戲專案客戶端伺服器尋路同步方案

基於Unity的遊戲專案客戶端伺服器尋路同步方案

    Unity中目前提供的基於Navmesh的網格尋路,如果僅僅是單機遊戲,其實功能還是能滿足的,當然,如果你做的是大規模兵海流的 rts遊戲,Unity的網格尋路還是會碰到多人尋路相互擠壓的問題。     由於我們目前的工作主要集中在手遊,而又以聯網RPG遊戲為主。由於Unity並未開源Navmesh尋路元件,而Navmesh其實上是開源尋路專案RecastNavigation的作者做的升級版本,自然而然,我們會嘗試在伺服器端整合RecastNavigation。進行此類工作的團隊很多,大概思路都是根據RecastNavigation要求,定製客戶端外掛,匯出客戶端網格資料。     不過很可惜的是,雖然大部分情況,客戶端和伺服器能做到尋路路徑統一,但是在一些特殊情況下,比如網格是一些特別細長的三角形,尋路路徑卻存在偏差,這幾乎是不能接受的。但是如果拋棄客戶端的尋路,把RecastNavigation匯出到客戶端,雖然能保障路徑統一,但是實際中行路及碰撞等圖形表現不是很好,畢竟Unity為尋路做了大量的工作。     之前的專案為了上線,大多采用了折中的方案: 方案1:在客戶端尋路併發送到伺服器,執行廣播。伺服器僅僅是驗證路徑是否合理。     方案2:客戶端自己根據Navmesh生成標準尋路格子,將客戶端尋路替換成基於格子的A*尋路,去除單位碰撞。自己單獨處理跳躍點等情況,我曾經為此寫過一個Unity尋路外掛Navgrid。     上述2個方案其實上都不算完美,僅僅是可用而已。對大多數研發團隊來說就一勞永逸的方案,其實還是等待Unity能開放尋路演算法原始碼,畢竟Unity已經慢慢開放了不少底層元件的原始碼。不過由於專案需要(需要客戶端伺服器完全同步且要求碰撞處理),我一直在思考一種相對完善的方案,把格子尋路和網格尋路結合起來:     首先,基於Tile我們生成一份帶行走權重的二維導航資料。把起始點和終點轉換成Tile序號,我們讓尋路單元在
Tile之間尋路。由於Tile足夠大,我們甚至不用做查詢後路徑的二次優化,而且這步尋路會足夠快。     其次,在到達終點所在Tile後,尋路轉換為精細尋路,伺服器切換為RecastNavigation,客戶端切換為Unity自帶尋路。由於在Tile內尋路,網格尋路路徑將極大簡化,基本上能保障路徑的一致性,就算是真的有偏差,由於整個尋路是在Tile內進行的,也不會偏差太多。下圖為大概的尋路路徑:


相關推薦

基於Unity遊戲專案客戶伺服器同步方案

    Unity中目前提供的基於Navmesh的網格尋路,如果僅僅是單機遊戲,其實功能還是能滿足的,當然,如果你做的是大規模兵海流的 rts遊戲,Unity的網格尋路還是會碰到多人尋路相互擠壓的問題。     由於我們目前的工作主要集中在手遊,而又以聯網RPG遊戲為主

unity同步遊戲極簡框架及例項(附客戶伺服器原始碼)

閱前提示:  此框架為有幀同步需求的遊戲做一個簡單的示例,實現了一個精簡的框架,本文著重講解幀同步遊戲開發過程中需要注意的各種要點,伴隨框架自帶了一個小的塔防sample作為演示. 目錄:

java網路程式設計基於TCP的多客戶連線伺服器

package com.test.net; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.S

【Linux網路程式設計】基於TCP多程序(fork)版本客戶/伺服器

客戶端程式碼: #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/types.h

2017.8.22 用python實現簡單基於TCP/IP的客戶伺服器

伺服器端 import socket serversocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) serversocket.bind((

zookeeper基本特性與基於Linux的ZK客戶命令行學習

zookeeper 命令行 客戶端 watcher 事件 zookeeper常用命令行操作 通過 zkCli.sh 來打開zk客戶端: [root@study-01 ~]# zkCli.sh [zk: localhost:2181(CONNECTED) 0] ls 與 ls2 命令:

基於CAS的單點登入SSO[5]: 基於Springboot實現CAS客戶的前後分離

基於CAS的單點登入SSO[5]: 基於Springboot實現CAS客戶端的前後端分離 作者:家輝,日期:2017-08-24 CSDN部落格: http://blog.csdn.net/gobitan 摘要:現在大部分系統的開發都已經

Java 客戶伺服器範例

最近在面試,雖然學習了一些新的框架,但是可能問類似於客戶端伺服器模型,然後根據其設計,所以就根據面試內容梳理一下客戶端伺服器模型。 客戶端基本思路: 1.建立Socket例項,設定埠和IP地址等 2.通過Socket例項,獲取到流物件 3.通過流物件,向其中輸入資料 ,並且在完成後實現關閉流。 (注

Socket的應用(一)——建立一個簡單的回顯客戶/伺服器

在這篇文章中,我們將利用Python的Socket模組,編寫一個簡單的本地TCPC/S應用:建立Server和Client,在開始時Server等待Client的請求過程中,Server顯示出等待資訊,之後Client連線上Server併發送訊息,最後Server則要回顯出來自客戶端的所有輸出,併發

Netty 一個非阻塞的客戶/伺服器框架

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

簡易NIS——搭建一個客戶/伺服器模式的網路認證環境

背景知識 NIS(Network Information Service網路資訊系統)是美國Sun公司開發的一套開源的網上身份認證系統。NIS基於RPC,是由一個伺服器、一個客戶端庫以及幾個管理工具組成。起初,NIS被稱作黃頁(Yellow Pages),或YP,現在仍然使用這個名稱來非正式地指

第4章 ZK基本特性與基於Linux的ZK客戶命令列學習

ZK基本特性與基於Linux的ZK客戶端命令列學習 4-1 zookeeper常用命令列操作 4-2 session的基本原理與create命令的使用 4-3 set與delete命令的使用 4-4 zk特性 – 理解watcher機制 4-5

(QT) C++ 版本IM通訊軟體(客戶+伺服器文字聊天、檔案斷點續傳、線上使用者搜尋)

緊接著上一節課程,這次的作業是要求實現一個簡易版的“QQ”,可支援“軟體需求”所列出的功能。當時由於圖方便便選擇了QTCPSocket進行整個過程的通訊(事後才知道有多坑)。服務端介面比較簡單,就幾個按鈕一個進度條,主要在客戶端實現了基本的功能和介面。整個學習和

基於Qssh的sftp客戶

專案需要寫一個sftp的自動升級程式,查閱了下網上的一些資料,有libssh2+openssl和基於qssh等方法。之前考慮從filezilla原始碼中參考自己封裝,考慮到時間關係就選擇最快的方式了。基於qssh來封裝。實現上傳下載,檔案列表,上傳目錄等基本功能,參考file

面試常見測試場景-杯子,筆,直播,微信,客戶伺服器

1,看直播卡原因 網速慢。記憶體不足。頁面快取過多。電腦中毒。瀏覽器版本低 2,微信傳送測試 功能點:傳送內容(空白,正常文字,超長文字,特殊字元,表情,圖片,紅包,語音) 傳送物件(普通使用者,公眾號,群,其它特殊主體) 衍生功能(轉發,語音轉文字,刪除,撤回)

9.redis學習筆記-客戶&伺服器.md

12. 客戶端 12.1. 客戶端屬性 客戶端狀態包含的屬性可以分為兩類: 通用屬性,很少與特定功能相關,無論客戶端執行什麼工作,都要用到這些屬性 與特定功能相關的屬性,比如操作資料庫要用到的db屬性和dictid屬性 12.1.1. 套接字描述 客戶端狀

python網路程式設計(TCP客戶/伺服器實現)

下面的程式實現的功能:客戶端發來訊息,伺服器端加上時間戳返回給使用者 伺服器端: from socket import * from time import ctime import os p

Linux下Socket客戶伺服器通訊

Linux/Unix系統一切都是檔案 Linux系統中,存在一個虛擬檔案系統VFS,把一切實體視為檔案,包括普通檔案、音視訊、輸入輸出裝置等。這樣,作業系統可以可以提供統一的介面來操作任何實體。每個“檔案”建立後,都有一個檔案描述符(File Describer),檔案描述符是一個正

A/B 測試的基本概念舉例理解以及具體實現方法【傳統A/B測試基於的 A/B 測試(Back-end AB test),現在基本上基於前端js在客戶進行分流,有更多優點,請看裡面】

文章來源:http://www.aliued.cn/2010/09/27/ab-testing-realization-method.html 什麼是A/B測試?以及如何進行? 很多朋友都問我怎麼進行A/B測試,我一般都不直接回答他們的問題,而是首先問一句:“你的日

基於live555的rtsp 客戶模組優化

該模組支援多路rtsp流,基於這個模組做了一個錄影服務 錄影服務需要穩定性比較好,在測試的過程中發現 執行幾個小時 1天 後 程式出現崩潰。 經過仔細排查 做了如下優化解決 更改 BasicUsageEnvironment 庫的 doeventloop函式 voi