亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種虛擬環(huán)境中的碰撞處理方法、客戶端、服務器及系統(tǒng)與流程

文檔序號:11773860閱讀:404來源:國知局
一種虛擬環(huán)境中的碰撞處理方法、客戶端、服務器及系統(tǒng)與流程

本發(fā)明涉及增強現(xiàn)實技術領域,特別涉及一種虛擬環(huán)境中的碰撞處理方法、客戶端、服務器及系統(tǒng)。



背景技術:

在大多的游戲服務器中,對于玩家或者npc的碰撞的處理是通過服務器進行檢測處理的,大多使用xz軸平面的正方形,在y軸一定的高度,形成一個長方體進行檢測,檢測方式通常為判斷對方中心點是否進入自身的長方體碰撞區(qū),這樣的檢測,粒度比較粗,不是特別靈敏,有些游戲會對服務器的底層做c++擴展,能夠在此基礎上進行二次篩選計算,做到碰撞的優(yōu)化,但是計算量消耗驚人。有些手游的碰撞會通過客戶端進行檢測碰撞,然后根據(jù)與服務器之間的協(xié)議進行碰撞處理,能較簡單的實現(xiàn)靈敏的碰撞檢測,同時可以實現(xiàn)各種形狀的碰撞盒子,將服務器端單一的長方體檢測變得可視化、簡單化,但是該種方式也存在一些弊端,其中,在客戶端根據(jù)碰撞盒檢測到碰撞后,需要發(fā)送當前實體的所有信息和碰撞對象的所有信息到服務器,造成網絡傳輸成本的增加。



技術實現(xiàn)要素:

本發(fā)明提供了一種虛擬環(huán)境中的碰撞處理方法、客戶端、服務器及系統(tǒng),解決了現(xiàn)有技術中網絡傳輸成本增加的技術問題。

本發(fā)明解決上述技術問題的技術方案如下:

第一方面,一種虛擬環(huán)境中的碰撞處理方法,應用于客戶端,包括:

創(chuàng)建虛擬場景,所述虛擬場景包括多個客戶端對應的實體模型和非實體模型;

給所述多個客戶端中包括的當前客戶端對應的當前實體模型添加碰撞盒,所述碰撞盒用于檢測碰撞事件;

當檢測到所述碰撞事件時,對所述當前實體模型的id和與所述當前實體模型相碰撞的碰撞模型的id進行左移位操作,并合并成uint格式的目標參數(shù)發(fā)送至服務器;

接收所述服務器反饋的根據(jù)所述目標參數(shù)計算得到的所述當前實體模型碰撞之后的運動路徑;

根據(jù)所述運動路徑控制所述當前實體模型進行運動,并通過所述服務器將所述運動路徑同步到所述多個客戶端。

本發(fā)明的有益效果是:本技術方案在檢測到碰撞事件時,僅向服務端發(fā)送當前實體模型和碰撞模型的id,而不發(fā)送模型的詳細信息,大大減少了傳輸數(shù)據(jù)量。

結合第一方面,在第一方面的第一種可能的實現(xiàn)方式中,在當檢測到所述碰撞事件時,對所述當前實體模型的id和與所述當前實體模型相碰撞的碰撞模型的id進行左移位操作,并合并成uint格式的目標參數(shù)發(fā)送至服務器之前,還包括:

將所述虛擬場景中的所有實體模型和非實體模型的模型信息寫成json文件發(fā)送至服務器保存,所述模型信息包括所有實體模型和非實體模型的id。

第二方面,一種虛擬環(huán)境中的碰撞處理方法,應用于服務器,包括:

接收客戶端發(fā)送的uint格式的目標參數(shù),對所述目標參數(shù)進行右位移操作,獲取虛擬場景中所述客戶端對應的當前實體模型的id和與所述當前實體模型相碰撞的碰撞模型的id;

根據(jù)所述當前實體模型的id和所述碰撞模型的id分別獲取所述當前實體模型的位姿信息和所述碰撞模型的位姿信息;

根據(jù)所述當前實體模型的位姿信息和所述碰撞模型的位姿信息計算得到所述當前實體模型碰撞之后的運動路徑,并反饋給所述客戶端。

結合第二方面,在第二方面的第一種可能的實現(xiàn)方式中,在接收客戶端發(fā)送的uint格式的目標參數(shù),對所述目標參數(shù)進行右位移操作,獲取虛擬場景中所述客戶端對應的當前實體模型的id和與所述當前實體模型相碰撞的碰撞模型的id之前,還包括:

接收并保存所述客戶端發(fā)送的json文件,所述json文件包括所述虛擬場景中的所有實體模型和非實體模型的模型信息,所述模型信息包括id。

第三方面,一種客戶端,包括:

創(chuàng)建模塊,用于創(chuàng)建虛擬場景,所述虛擬場景包括多個客戶端對應的實體模型和非實體模型;

添加模塊,用于給所述多個客戶端中包括的當前客戶端對應的當前實體模型添加碰撞盒,所述碰撞盒用于檢測碰撞事件;

檢測模塊,用于當檢測到所述碰撞事件時,對所述當前實體模型的id和與所述當前實體模型相碰撞的碰撞模型的id進行左移位操作,并合并成uint格式的目標參數(shù)發(fā)送至服務器;

接收模塊,用于接收所述服務器反饋的根據(jù)所述目標參數(shù)計算得到的所述當前實體模型碰撞之后的運動路徑;

控制模塊,用于根據(jù)所述運動路徑控制所述當前實體模型進行運動,并通過所述服務器同步到所述多個客戶端。

結合第三方面,在第三方面的第一種可能的實現(xiàn)方式中,還包括:

發(fā)送模塊,用于將所述虛擬場景中的所有實體模型和非實體模型的模型信息寫成json文件發(fā)送至服務器保存,所述模型信息包括所有實體模型和非實體模型的id。

第四方面,一種服務器,包括:

第一接收模塊,用于接收客戶端發(fā)送的uint格式的目標參數(shù),對所述目標參數(shù)進行右位移操作,獲取虛擬場景中所述客戶端對應的當前實體模型的id和與所述當前實體模型相碰撞的碰撞模型的id;

獲取模塊,用于根據(jù)所述當前實體模型的id和所述碰撞模型的id分別獲取所述當前實體模型的位姿信息和所述碰撞模型的位姿信息;

計算模塊,用于根據(jù)所述當前實體模型的位姿信息和所述碰撞模型的位姿信息計算得到所述當前實體模型碰撞之后的運動路徑,并反饋給所述客戶端。

結合第四方面,在第四方面的第一種可能的實現(xiàn)方式中,還包括:

第二接收模塊,用于接收并保存所述客戶端發(fā)送的json文件,所述json文件包括所述虛擬場景中的所有實體模型和非實體模型的模型信息,所述模型信息包括所有實體模型和非實體模型的id。

第五方面,一種虛擬環(huán)境中的碰撞處理系統(tǒng),包括:至少一個由第三方面限定的任一種客戶端和由第四方面限定的任一種服務器。

附圖說明

圖1為本發(fā)明實施例提供的一種虛擬環(huán)境中的碰撞處理方法的流程示意圖;

圖2為本發(fā)明另一實施例提供的一種虛擬環(huán)境中的碰撞處理方法的流程示意圖;

圖3為本發(fā)明另一實施例提供的一種虛擬環(huán)境中的碰撞處理方法的流程示意圖;

圖4為本發(fā)明另一實施例提供的一種虛擬環(huán)境中的碰撞處理方法的流程示意圖;

圖5為本發(fā)明另一實施例提供的一種客戶端的結構示意圖;

圖6為本發(fā)明另一實施例提供的一種服務器的結構示意圖;

圖7為本發(fā)明另一實施例提供的一種虛擬環(huán)境中的碰撞處理系統(tǒng)的結構示意圖。

具體實施方式

以下結合附圖對本發(fā)明的原理和特征進行描述,所舉實例只用于解釋本發(fā)明,并非用于限定本發(fā)明的范圍。

如圖1所示,一種虛擬環(huán)境中的碰撞處理方法,應用于客戶端,包括:

步驟101,創(chuàng)建虛擬場景,虛擬場景包括多個客戶端對應的實體模型和非實體模型。

利用uinty3d軟件創(chuàng)建虛擬場景,該虛擬場景中包括各個玩家(客戶端)對應的實體模型,以及各種非實體模型。

步驟102,給多個客戶端中包括的當前客戶端對應的當前實體模型添加碰撞盒,碰撞盒用于檢測碰撞事件。

可以給多個客戶端對應的多個實體模型添加碰撞盒,也可以給多個客戶端中包括的當前客戶端對應的當前實體模型添加碰撞盒,如果不需要檢測碰撞,則可以不添加碰撞盒或者移除碰撞盒,其中,碰撞盒是uinty3d的一個組件,類似于在物體周圍加了個能檢測碰撞的盒子,在游戲中是看不到的。

步驟103,當檢測到碰撞事件時,對當前實體模型的id和與當前實體模型相碰撞的碰撞模型的id進行左移位操作,并合并成uint格式的目標參數(shù)發(fā)送至服務器。

如果當前實體模型與虛擬場景中除了當前實體模型之外的任一模型相碰撞,則生成碰撞事件,碰撞事件包括當前實體模型和與當前實體模型相碰撞的碰撞模型,該碰撞模型可以是玩家對應的實體模型,也可以是非實體模型。如果只是發(fā)送id,大致的拼接方式為:當前id1+對方id2+arg(可能附帶其他信息或者類型),由于服務器中的id是不會重復,考慮到極限情況下,即多個id的時候,uint的范圍為0~2^32-1,總共有32位,我們給id1和id2各自分配14位,arg分配4位,然后對id1,id2,arg進行左移位操作,合并為一個uint參數(shù)targetuint發(fā)送至服務器。

步驟104,接收服務器反饋的根據(jù)目標參數(shù)計算得到的當前實體模型碰撞之后的運動路徑。

步驟105,根據(jù)運動路徑控制當前實體模型進行運動,并通過服務器將運動路徑同步到多個客戶端。

在本發(fā)明該實施例提供的一種虛擬環(huán)境中的碰撞處理方法中,在檢測到碰撞事件時,僅向服務端發(fā)送當前實體模型和碰撞模型的id,而不發(fā)送模型的詳細信息,大大減少了傳輸數(shù)據(jù)量。

如圖2所示,一種虛擬環(huán)境中的碰撞處理方法,應用于客戶端,包括:

步驟201,創(chuàng)建虛擬場景,虛擬場景包括多個客戶端對應的實體模型和非實體模型。

步驟202,給多個客戶端中包括的當前客戶端對應的當前實體模型添加碰撞盒,碰撞盒用于檢測碰撞事件。

步驟203,將虛擬場景中的所有實體模型和非實體模型的模型信息寫成json文件發(fā)送至服務器保存,模型信息包括所有實體模型和非實體模型的id。

把虛擬場景中加入的非實體模型的模型信息(包括id)寫成資源json文件,放到服務器(uinty3d可以將地圖資源導出為json文件,但是可能不太精確,而且碰撞的信息為長方體,在碰撞盒為不規(guī)則的時候不夠靈活),在客戶端檢測到碰撞后,可以避免發(fā)送position+direction+id等json拼接方式,而是發(fā)送id,服務器可以根據(jù)id去json文件中找出障礙物的詳細信息。

步驟204,當檢測到碰撞事件時,對當前實體模型的id和與當前實體模型相碰撞的碰撞模型的id進行左移位操作,并合并成uint格式的目標參數(shù)發(fā)送至服務器。

步驟205,接收服務器反饋的根據(jù)目標參數(shù)計算得到的當前實體模型碰撞之后的運動路徑。

步驟206,根據(jù)運動路徑控制當前實體模型進行運動,并通過服務器將運動路徑同步到多個客戶端。

在本發(fā)明該實施例提供的一種虛擬環(huán)境中的碰撞處理方法中,在客戶端向服務器發(fā)送uint格式的目標參數(shù)之前,將虛擬場景中的非實體模型的模型信息寫成資源json文件發(fā)送至服務器保存,用于服務器根據(jù)接收到的目標參數(shù)中包括的當前實體模型的id和碰撞模型的id分別從資源json文件中獲取到相應的詳細信息,便于執(zhí)行后續(xù)運動路徑的計算步驟。

如圖3所示,一種虛擬環(huán)境中的碰撞處理方法,應用于服務器,包括:

步驟301,接收客戶端發(fā)送的uint格式的目標參數(shù),對目標參數(shù)進行右位移操作,獲取虛擬場景中客戶端對應的當前實體模型的id和與當前實體模型相碰撞的碰撞模型的id。

客戶端將targetuint發(fā)送到服務器,服務器獲取到targetuint,進行向右移位操作,取出三個參數(shù)id1,id2和arg。

步驟302,根據(jù)當前實體模型的id和碰撞模型的id分別獲取當前實體模型的位姿信息和碰撞模型的位姿信息。

如果實體碰撞的對象為其他的玩家實體,此時服務器是可以根據(jù)實體entity的mailbox消息對象獲取該實體的所有信息,包括position,direction等。如果實體碰撞的為地圖資源,例如障礙物,墻壁,石頭等,服務端通過id從資源json文件中獲取詳細信息,之后進行避障或者狀態(tài)的遷移。

步驟303,根據(jù)當前實體模型的位姿信息和碰撞模型的位姿信息計算得到當前實體模型碰撞之后的運動路徑,并反饋給客戶端。

在本發(fā)明該實施例提供的一種虛擬環(huán)境中的碰撞處理方法中,通過移位操作的方式,將當前實體模型和碰撞模型的id以uint的形式發(fā)送給服務器,服務器根據(jù)傳遞的id,在保存場景信息的json文件中找到該實體的位姿信息position和direction,然后進行計算,大大的減少了客戶端和服務器之間的消息長度,實體的id最多有14位進行存儲,最大2^14,可以滿足大多的實體個數(shù)要求,如果實體個數(shù)會超過該限制,可以考慮使用uint64進行傳遞,移位方法類似。

如圖4所示,一種虛擬環(huán)境中的碰撞處理方法,應用于服務器,包括:

步驟401,接收并保存客戶端發(fā)送的json文件,json文件包括虛擬場景中的所有實體模型和非實體模型的模型信息,模型信息包括所有實體模型和非實體模型的id。

在客戶端和服務器使用tcp進行交互的時候,通過數(shù)據(jù)包發(fā)送出去,解析成字節(jié)流進行使用,在進行交互的時候,一般都是使用json字符串或者uint的方式進行發(fā)送。json的傳輸方式特點:占帶寬小,格式壓縮,便于客戶端讀取,支持多種語言(c/c++/java/python),便于服務端解析等。

步驟402,接收客戶端發(fā)送的uint格式的目標參數(shù),對目標參數(shù)進行右位移操作,獲取虛擬場景中客戶端對應的當前實體模型的id和與當前實體模型相碰撞的碰撞模型的id。

如果是多次發(fā)送長json字符串,例如position+direction+id,當碰撞過于頻繁,客戶端頻繁創(chuàng)建json對象進行拼接,服務器接受到消息后,再頻繁的解析json,由于tcp是保證數(shù)據(jù)的順序性和正確性的,當前消息不處理結束是不會處理下一條消息,所以如果解析頻繁可能會造成socket緩沖區(qū)塞滿,最終發(fā)生丟棄行為,導致一些不全的包發(fā)送到服務器,造成錯誤。uint的傳輸方式特點:占用4個字節(jié),比json字符串字節(jié)長度少很多,適合多個短消息發(fā)送,但是發(fā)送內容只能是uint,沒有json方式靈活。為了避免丟包或者是數(shù)據(jù)包錯誤,采用uint的發(fā)送方式,最大限度的利用這4個字節(jié)。

步驟403,根據(jù)當前實體模型的id和碰撞模型的id分別獲取當前實體模型的位姿信息和碰撞模型的位姿信息。

步驟404,根據(jù)當前實體模型的位姿信息和碰撞模型的位姿信息計算得到當前實體模型碰撞之后的運動路徑,并反饋給客戶端。

在本發(fā)明該實施例提供的一種虛擬環(huán)境中的碰撞處理方法中,采用的json傳輸方式傳輸虛擬場景中所有模型的詳細信息給服務器,占帶寬小且便于服務器解析;采用uint傳輸方式傳輸需要進行頻繁傳輸?shù)膇d信息給服務器,避免丟包或者是數(shù)據(jù)包錯誤。

如圖5所示,一種客戶端50,包括:

創(chuàng)建模塊510,用于創(chuàng)建虛擬場景,虛擬場景包括多個客戶端對應的實體模型和非實體模型。

添加模塊520,用于給多個客戶端中包括的當前客戶端對應的當前實體模型添加碰撞盒,碰撞盒用于檢測碰撞事件。

檢測模塊530,用于當檢測到碰撞事件時,對當前實體模型的id和與當前實體模型相碰撞的碰撞模型的id進行左移位操作,并合并成uint格式的目標參數(shù)發(fā)送至服務器。

接收模塊540,用于接收服務器反饋的根據(jù)目標參數(shù)計算得到的當前實體模型碰撞之后的運動路徑。

控制模塊550,用于根據(jù)運動路徑控制當前實體模型進行運動,并通過服務器將運動路徑同步到多個客戶端。

還包括:

發(fā)送模塊560,用于將虛擬場景中的所有實體模型和非實體模型的模型信息寫成json文件發(fā)送至服務器保存,模型信息包括所有實體模型和非實體模型的id。

如圖6所示,一種服務器60,包括:

第一接收模塊610,用于接收客戶端發(fā)送的uint格式的目標參數(shù),對目標參數(shù)進行右位移操作,獲取虛擬場景中客戶端對應的當前實體模型的id和與當前實體模型相碰撞的碰撞模型的id。

獲取模塊620,用于根據(jù)當前實體模型的id和碰撞模型的id分別獲取當前實體模型的位姿信息和碰撞模型的位姿信息。

計算模塊630,用于根據(jù)當前實體模型的位姿信息和碰撞模型的位姿信息計算得到當前實體模型碰撞之后的運動路徑,并反饋給客戶端。

還包括:

第二接收模塊640,用于接收并保存客戶端發(fā)送的json文件,json文件包括虛擬場景中的所有實體模型和非實體模型的模型信息,模型信息包括所有實體模型和非實體模型的id。

如圖7所示,一種虛擬環(huán)境中的碰撞處理系統(tǒng)70,包括:至少一個客戶端50和服務器60。

以上所述僅為本發(fā)明的較佳實施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內。

當前第1頁1 2 
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1