本發(fā)明涉及虛擬應用領域,具體而言,涉及一種虛擬場景的加載方法和裝置。
背景技術:
當用戶使用手機等終端加載虛擬場景時,現(xiàn)有技術使用的方法在虛擬場景加載時把虛擬場景中的所有靜態(tài)物件全部加載,這種處理方法在虛擬場景復雜度很小時,加載虛擬場景產(chǎn)生的負載在手機等終端上可以承受,但是在加載大規(guī)模虛擬場景時,產(chǎn)生的負載非常大,會造成加載卡頓的問題。
針對上述的問題,目前尚未提出有效的解決方案。
技術實現(xiàn)要素:
本發(fā)明實施例提供了一種虛擬場景的加載方法和裝置,以至少解決現(xiàn)有技術中加載大規(guī)模虛擬場景時卡頓的技術問題。
根據(jù)本發(fā)明實施例的一個方面,提供了一種虛擬場景的加載方法,包括:檢測是否需要對待加載的虛擬場景進行加載;在檢測到需要對所述待加載的虛擬場景進行加載時,獲取所述待加載的虛擬場景的配置文件,其中,所述配置文件用于記錄虛擬場景資源塊的配置數(shù)據(jù),所述待加載的虛擬場景在二維平面上被劃分為多個虛擬場景資源塊;加載所述配置文件中記錄的所述多個虛擬場景資源塊中的目標虛擬場景資源塊的配置數(shù)據(jù)。
根據(jù)本發(fā)明實施例的另一方面,還提供了一種虛擬場景的加載裝置,包括:第一檢測單元,用于檢測是否需要對待加載的虛擬場景進行加載;獲取單元,用于在所述第一檢測單元檢測到需要對所述待加載的虛擬場景進行加載時,獲取所述待加載的虛擬場景的配置文件,其中,所述配置文件用于記錄虛擬場景資源塊的配置數(shù)據(jù),所述待加載的虛擬場景在二維平面上被劃分為多個虛擬場景資源塊;第一加載單元,用于加載所述配置文件中記錄的所述多個虛擬場景資源塊中的目標虛擬場景資源塊的配置數(shù)據(jù)。
在本發(fā)明實施例中,將待加載的虛擬場景在二維平面上劃分為多個虛擬場景資源塊,目標虛擬場景資源塊為其中的一個或多個虛擬場景資源塊,當需要加載虛擬場景時,僅僅加載目標虛擬場景資源塊的配置數(shù)據(jù),而不是加載整個虛擬場景的所有配置數(shù)據(jù),大大減少了加載的數(shù)據(jù)量,因此,不會出現(xiàn)卡頓的問題,進而達到流暢地加載大規(guī)模虛擬場景的技術效果,進而解決了現(xiàn)有技術中加載大規(guī)模虛擬場景時卡頓的技術問題。
附圖說明
此處所說明的附圖用來提供對本發(fā)明的進一步理解,構成本申請的一部分,本發(fā)明的示意性實施例及其說明用于解釋本發(fā)明,并不構成對本發(fā)明的不當限定。在附圖中:
圖1是根據(jù)本發(fā)明實施例的虛擬場景的加載方法的硬件環(huán)境的示意圖;
圖2是根據(jù)本發(fā)明實施例的一種可選的虛擬場景的加載方法的流程圖;
圖3是根據(jù)本發(fā)明實施例的創(chuàng)建游戲場景并輸出游戲場景的數(shù)據(jù)的示意圖;
圖4是根據(jù)本發(fā)明實施例的虛擬場景為游戲場景時整體更新流程圖;
圖5是根據(jù)本發(fā)明實施例的虛擬場景為游戲場景時流式加載的流程圖;
圖6-1是根據(jù)本發(fā)明實施例的玩家在虛擬場景中所處位置的示意圖;
圖6-2是根據(jù)本發(fā)明實施例的以玩家為中心的9個格子在虛擬場景中所處位置的示意圖;
圖6-3是根據(jù)本發(fā)明實施例的以玩家為中心的25個格子在虛擬場景中所處位置的示意圖;
圖7是根據(jù)本發(fā)明實施例的等級劃分的示意圖;
圖8是根據(jù)本發(fā)明實施例的虛擬場景細節(jié)的裁剪參數(shù)的示意圖;
圖9是根據(jù)本發(fā)明實施例的導出數(shù)據(jù)的工具的示意圖;
圖10是根據(jù)本發(fā)明實施例的一種可選的虛擬場景的加載裝置的示意圖;
圖11是根據(jù)本發(fā)明實施例的一種終端的結構框圖。
具體實施方式
為了使本技術領域的人員更好地理解本發(fā)明方案,下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分的實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都應當屬于本發(fā)明保護的范圍。
需要說明的是,本發(fā)明的說明書和權利要求書及上述附圖中的術語“第一”、“第二”等是用于區(qū)別類似的對象,而不必用于描述特定的順序或先后次序。應該理解這樣使用的數(shù)據(jù)在適當情況下可以互換,以便這里描述的本發(fā)明的實施例能夠以除了在這里圖示或描述的那些以外的順序實施。此外,術語“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過程、方法、系統(tǒng)、產(chǎn)品或設備不必限于清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或對于這些過程、方法、產(chǎn)品或設備固有的其它步驟或單元。
根據(jù)本發(fā)明實施例,提供了一種虛擬場景的加載方法的實施例。
可選地,在本實施例中,上述虛擬場景的加載方法可以應用于如圖1所示的由服務器102和終端104所構成的硬件環(huán)境中。如圖1所示,服務器102通過網(wǎng)絡與終端104進行連接,上述網(wǎng)絡包括但不限于:廣域網(wǎng)、城域網(wǎng)或局域網(wǎng),終端104并不限定于PC、手機、平板電腦等。本發(fā)明實施例的虛擬場景的加載方法可以由服務器102來執(zhí)行,也可以由終端104來執(zhí)行,還可以是由服務器102和終端104共同執(zhí)行。其中,終端104執(zhí)行本發(fā)明實施例的虛擬場景的加載方法也可以是由安裝在其上的客戶端來執(zhí)行。
圖2是根據(jù)本發(fā)明實施例的一種可選的虛擬場景的加載方法的流程圖,如圖2所示,該方法可以包括以下步驟:
步驟S202,檢測是否需要對待加載的虛擬場景進行加載。
步驟S204,在檢測到需要對待加載的虛擬場景進行加載時,獲取待加載的虛擬場景的配置文件,其中,配置文件用于記錄虛擬場景資源塊的配置數(shù)據(jù),待加載的虛擬場景在二維平面上被劃分為多個虛擬場景資源塊。
步驟S206,加載配置文件中記錄的多個虛擬場景資源塊中的目標虛擬場景資源塊的配置數(shù)據(jù)。
虛擬場景可以是游戲場景等。
在本發(fā)明實施例中,將待加載的虛擬場景在二維平面上劃分為多個虛擬場景資源塊,目標虛擬場景資源塊為其中的一個或多個虛擬場景資源塊,當需要加載虛擬場景時,僅僅加載目標虛擬場景資源塊的配置數(shù)據(jù),而不是加載整個虛擬場景的所有配置數(shù)據(jù),大大減少了加載的數(shù)據(jù)量,因此,不會出現(xiàn)卡頓的問題,解決了現(xiàn)有技術中加載大規(guī)模虛擬場景時卡頓的技術問題,進而達到流暢地加載大規(guī)模虛擬場景的技術效果。
每個虛擬場景由多個格子組成。例如,虛擬場景地圖為一個300m×300m的正方形,每個格子為一個10m×10m的正方形,每個虛擬場景由900個格子組成。現(xiàn)有技術在加載虛擬場景時,需要加載這900個格子,數(shù)據(jù)量非常大。在本發(fā)明實施例中,將待加載的虛擬場景在二維平面上劃分為多個虛擬場景資源塊,其中,每個虛擬場景資源塊包括若干個格子,在需要加載虛擬場景時,從多個虛擬場景資源塊中選擇出目標虛擬場景資源塊,僅僅加載目標虛擬場景資源塊包括的若干個格子的配置數(shù)據(jù),這就有效減少了需要加載的數(shù)據(jù)量,提高了加載速度,并且降低了對終端的要求。
目標虛擬場景資源塊中有多個待加載物件。當從多個虛擬場景資源塊中確定出目標虛擬場景資源塊之后,從配置數(shù)據(jù)中獲取目標虛擬場景資源塊中每個待加載物件的配置數(shù)據(jù);將每個待加載物件的配置數(shù)據(jù)存入到加載隊列中;根據(jù)多個待加載物件在加載隊列中的前后順序,對多個待加載物件的配置數(shù)據(jù)進行加載。
由于隊列具有先進先出的特點,因此,隊列中位于前面位置的配置數(shù)據(jù)比位于后面位置的配置數(shù)據(jù)先加載。在將每個待加載物件的配置數(shù)據(jù)存入到加載隊列中之前,可以對多個待加載物件的配置數(shù)據(jù)進行排序,根據(jù)排序結果的先后順序將多個待加載物件的配置數(shù)據(jù)存入到加載隊列。例如,假定目標虛擬場景資源塊中有6個待加載物件,分別為待加載物件W1、待加載物件W2、……、待加載物件W6。這6個待加載物件對應的配置數(shù)據(jù)分別為配置數(shù)據(jù)I1、配置數(shù)據(jù)I2、……、配置數(shù)據(jù)I6。根據(jù)與游戲玩家的距離由近到遠,對這6個待加載物件進行排序,排序結果為:待加載物件W2、待加載物件W6、待加載物件W3、待加載物件W1、待加載物件W4、待加載物件W5。則依次將配置數(shù)據(jù)I2、配置數(shù)據(jù)I6、配置數(shù)據(jù)I3、配置數(shù)據(jù)I1、配置數(shù)據(jù)I4、配置數(shù)據(jù)I5存入到加載隊列。在進行加載時,按照配置數(shù)據(jù)I2、配置數(shù)據(jù)I6、配置數(shù)據(jù)I3、配置數(shù)據(jù)I1、配置數(shù)據(jù)I4、配置數(shù)據(jù)I5的順序進行加載。
再例如,將待加載的虛擬場景劃分成100個虛擬場景資源塊,將第20個虛擬場景資源塊作為目標虛擬場景資源塊。目標虛擬場景資源塊中有5棵樹和2個建筑物(多個待加載物件)。從配置數(shù)據(jù)中獲取目標虛擬場景資源塊中5棵樹和2個建筑物的配置數(shù)據(jù),將獲取到的5棵樹和2個建筑物的配置數(shù)據(jù)存入到加載隊列中,根據(jù)5棵樹和2個建筑物在加載隊列中的前后順序,對5棵樹和2個建筑物的配置數(shù)據(jù)進行加載??梢韵葘?個建筑物的配置數(shù)據(jù)存入到加載隊列,再將5棵樹的配置數(shù)據(jù)存入到加載隊列,由于隊列具有先進先出的特點,因此,隊列中位于前面位置的配置數(shù)據(jù)比位于后面位置的配置數(shù)據(jù)先加載。即,先加載2個建筑物的配置數(shù)據(jù),再加載5棵樹的配置數(shù)據(jù)。
可選地,在檢測是否需要對待加載的虛擬場景進行加載之前,可以創(chuàng)建虛擬場景并輸出虛擬場景的數(shù)據(jù)。以虛擬場景為游戲場景為例,對這個過程進行說明。圖3是根據(jù)本發(fā)明實施例的創(chuàng)建游戲場景并輸出游戲場景的數(shù)據(jù)的示意圖。如圖3所示,該過程包括以下步驟:
步驟S302,創(chuàng)建游戲場景。
步驟S304,劃分游戲場景的細節(jié)層次。例如,將游戲場景中的物件劃分為基礎顯示層、建筑層和細節(jié)層?;A顯示層可以是藍天、白云、地表等。建筑層可以是較大的建筑物等。細節(jié)層可以是花、草、昆蟲、小動物等。提前劃分好游戲場景細節(jié)層次的意義是:方便游戲運行中根據(jù)當前的硬件性能選擇顯示哪些細節(jié),保證玩家玩游戲的流暢度。
步驟S306,根據(jù)設置條件設置物件。對于不同的類型的游戲采用不同的設置條件。該設置條件可以是地圖的規(guī)模、物件的擺放的稠密程度、物件的設置方向和角度等。
步驟S308,檢查游戲場景是否符合設置條件。如果游戲場景符合上述設置條件,執(zhí)行步驟S312;如果游戲場景不符合設置條件,執(zhí)行步驟S310。
步驟S310,發(fā)出錯誤提示。如果游戲場景不符合設置條件,發(fā)出錯誤提示。在發(fā)出錯誤提示后,根據(jù)設置條件重新設置游戲場景中的物件。
步驟S312,導出游戲場景配置。
步驟S314,收集游戲場景物件和劃分格子。即,收集游戲場景中的物件和每個物件在格子中具體位置的信息。
步驟S316,確定游戲場景配置數(shù)據(jù)輸出完成。
以虛擬場景為游戲場景為例,對本發(fā)明實施例的整體更新流程進行說明。圖4是根據(jù)本發(fā)明實施例的虛擬場景為游戲場景時整體更新流程圖。如圖4所示,該流程包括以下步驟:
步驟S402,加載游戲場景配置數(shù)據(jù)。
游戲玩家在玩游戲時,在不同的時間,可以處于不同的位置,例如,玩家在時刻T1處于位置A,在時刻T2處于位置B。位置A和位置B可以是同一個游戲場景中的不同位置,也可以是不同游戲場景中的位置。當判斷出玩家所處的游戲場景之后,加載該游戲場景的配置數(shù)據(jù)。假設步驟S402中判斷出玩家所處的游戲場景為游戲場景S1,那么加載游戲場景S1的配置數(shù)據(jù)。
步驟S404,檢查配置合法性并解析(即檢測加載的配置文件是否正確,在加載的配置文件正確的情況下,解析加載的配置文件中的物件和格子數(shù)據(jù))。有時候,玩家能夠改變配置文件,這種改變會導致信息出錯。為了防止后續(xù)過程中使用錯誤的配置文件信息,此步驟檢查配置文件的合法性,如果檢查結果表明配置文件合法,對配置文件進行解析。如果檢查結果表明配置文件不合法,進行異常提示。對配置文件進行解析時,解析出配置文件中的物件和格子數(shù)據(jù)。
步驟S406,根據(jù)物件和格子數(shù)據(jù)構建四叉樹。游戲場景S1中包括多個格子,每個格子中包括多個物件,根據(jù)每個物件在格子中所處的位置構建四叉樹。四叉樹的每個節(jié)點對應一個格子。
步驟S408,根據(jù)玩家位置更新四叉樹。
步驟S410,判斷是否切換游戲場景。如果判斷結果為是,執(zhí)行步驟S414;如果判斷結果為否,執(zhí)行步驟S412。
玩家的位置改變有兩種情況,情況一:玩家從同一個游戲場景中的一個位置變到另一個位置;情況二:玩家從一個游戲場景變到另一個游戲場景。其中,情況二是步驟S410中的切換游戲場景。如果玩家從同一個游戲場景中的一個位置變到另一個位置,那么玩家沒有切換游戲場景,執(zhí)行步驟S412;如果玩家從一個游戲場景變到另一個游戲場景,那么玩家切換了游戲場景,執(zhí)行步驟S414。
步驟S412,玩家位置更新。如果玩家從同一個游戲場景中的一個位置變到另一個位置,那么玩家沒有切換游戲場景,此時,只需要將玩家的位置進行更新,并且根據(jù)更新后的玩家位置更新四叉樹。
步驟S414,清除數(shù)據(jù)。如果玩家從一個游戲場景(即上述第一游戲場景)變到另一個游戲場景(即上述第二游戲場景),那么玩家切換了游戲場景,在這種情況下,清除已經(jīng)加載的第一游戲場景的配置數(shù)據(jù),退出第一游戲場景,并加載第二游戲場景的配置數(shù)據(jù)。
步驟S416,退出游戲場景。如果玩家從一個游戲場景(即上述第一游戲場景)變到另一個游戲場景(即上述第二游戲場景),那么玩家切換了游戲場景,在這種情況下,退出第一游戲場景。
以虛擬場景為游戲場景為例,對本發(fā)明實施例的流式加載進行說明。圖5是根據(jù)本發(fā)明實施例的虛擬場景為游戲場景時流式加載的流程圖。如圖5所示,該流程包括以下步驟:
步驟S502,玩家位置更新,遍歷四叉樹。當玩家位置更新后,根據(jù)更新后玩家位置更新四叉樹。
步驟S504,根據(jù)上幀四叉樹加載的節(jié)點篩選出需要卸載的節(jié)點數(shù)據(jù)。
步驟S506,篩選出N個葉子節(jié)點。篩選出N個葉子節(jié)點的方法可以有多種,例如,方法一:篩選出與玩家的距離在預設范圍之內(nèi)的格子對應的葉子節(jié)點。方法二:根據(jù)所對應的格子與玩家的距離由近到遠的順序對葉子節(jié)點進行排序,篩選出排序結果中前面一定比例的葉子節(jié)點。N的取值方法有多種,例如,可以令N取9、16、25等。需要注意的是,N還可以取其他值,不限于以上列舉的幾種。
步驟S508,把N個葉子節(jié)點進行排序。把N個葉子節(jié)點進行排序,可以將所對應的格子位于玩家視線的前方的葉子節(jié)點排在靠前的位置,將所對應的格子位于玩家視線的后方的葉子節(jié)點排在靠后的位置。排序遵循的原則是:越是重要的格子,其所對應的葉子節(jié)點排序越靠前;越是不重要的格子,其所對應的葉子節(jié)點排序越靠后。一般來說,位于玩家視線范圍內(nèi)的格子比較重要,尤其是位于玩家視線正前方的格子非常重要,位于玩家視線范圍之外的格子比較不重要。
步驟S510,按照排序結果,將N個葉子節(jié)點對應的格子中所有物件有序加入加載隊列。越是重要的格子,其所對應的葉子節(jié)點排序越靠前,這些重要的格子中的物件先被加入加載隊列,由于隊列有先進先出的性質(zhì),因此,這些先被加入加載隊列的物件也是先被加載的,這就保證了重要的物件先加載、不重要的物件后加載,保證了玩家的觀看體驗。
步驟S512,判斷是否處于加載界面。如果判斷結果為是,執(zhí)行步驟S516;如果判斷結果為否,執(zhí)行步驟S514。
加載界面是玩家從一個游戲場景切換到另一個游戲場景的界面。
步驟S514,限定當前只能加載1個物件。在玩家沒有進行游戲場景切換時,即玩家的位置在同一個游戲場景中改變時,一幀只能加載1個物件,避免卡頓。
步驟S516,限定當前可以同時加載多個物件。當玩家從一個游戲場景切換到另一個游戲場景時,可以同時加載多個物件,即,一幀能加載多個物件,例如,一幀能加載10個物件。
步驟S518,按限定的數(shù)量對加載隊列中的物件進行加載。即,在玩家沒有進行游戲場景切換時,即玩家的位置在同一個游戲場景中改變時,按照一幀加載1個物件加載隊列中的物件;當玩家從一個游戲場景切換到另一個游戲場景時,按照一幀加載多個物件加載隊列中的物件。
步驟S520,判斷加載隊列是否為空。如果判斷出是,執(zhí)行步驟S522;如果判斷出否,執(zhí)行步驟S518。
步驟S522,確定加載完成。如果加載隊列為空,則確定加載隊列中的所有數(shù)據(jù)均已被加載。
本發(fā)明實施例在保證游戲場景視覺效果的前提下,對游戲場景進行空間劃分,把整個游戲場景在二維平面上切分為較小的資源塊,每一個塊采用流式加載或卸載的策略進行處理,對包含在塊里的物件再進行細節(jié)分層并按照距離遠近的順序進行加載或卸載,優(yōu)化了游戲場景切分的粒度和深度,控制了數(shù)據(jù)結構的節(jié)點數(shù)量。
可選地,當構建四叉樹之后,根據(jù)玩家的位置更新四叉樹,其中,四叉樹的每個葉子節(jié)點對應一個格子;篩選出與玩家之間的距離滿足預設條件的N個格子對應的葉子節(jié)點,得到N個葉子節(jié)點;加載N個葉子節(jié)點所對應的格子中物件的配置數(shù)據(jù)。
每個虛擬場景由多個格子組成。例如,虛擬場景地圖為一個150m×150m的正方形,每個格子為一個10m×10m的正方形,每個虛擬場景由225個格子組成,假設玩家在虛擬場景中所處位置為格子1,如圖6-1所示。
N的取值方法有多種,例如,可以令N取9、16、25等。需要注意的是,N還可以取其他值,不限于以上列舉的幾種。
當N取9時,以玩家為中心的9個格子(包括玩家所處的格子)如圖6-2所示。格子1為玩家所處的格子。格子1至格子9中每個格子分別對應一個葉子節(jié)點。每個格子中可以有多個物件。查找格子1至格子9中每個格子對應的葉子節(jié)點,得到9個葉子節(jié)點;其中,格子1對應的葉子節(jié)點是第1葉子節(jié)點;格子2對應的葉子節(jié)點是第2葉子節(jié)點;……;格子9對應的葉子節(jié)點是第9葉子節(jié)。按照第1葉子節(jié)點至第9葉子節(jié)點的順序,加載9個葉子節(jié)點所對應的格子中物件的配置數(shù)據(jù),即,加載格子1至格子9中每個格子中物件的配置數(shù)據(jù)??蛇x地,第2葉子節(jié)點所對應的格子位于玩家的視線的前方,即,優(yōu)先加載位于玩家的視線的前方的格子中的物件的配置數(shù)據(jù)。
如果玩家視線前的物件能快速加載出來,即使玩家視線范圍外的物件加載較慢,玩家也會有很好的體驗,所以,快速加載玩家視線范圍內(nèi)的物件是非常重要的,尤其處于玩家視線正前方的格子中的物件應快速加載出來。
當N取25時,以玩家為中心的25個格子(包括玩家所處的格子)如圖6-3所示。格子1為玩家所處的格子。格子1至格子25中每個格子分別對應一個葉子節(jié)點。每個格子中可以有多個物件。查找格子1至格子25中每個格子對應的葉子節(jié)點,得到25個葉子節(jié)點。其中,格子1對應的葉子節(jié)點是第1葉子節(jié)點;格子2對應的葉子節(jié)點是第2葉子節(jié)點;……;格子25對應的葉子節(jié)點是第25葉子節(jié)。按照第1葉子節(jié)點至第25葉子節(jié)點的順序,加載25個葉子節(jié)點所對應的格子中物件的配置數(shù)據(jù),即,加載格子1至格子25中每個格子中物件的配置數(shù)據(jù)。可選地,第2葉子節(jié)點所對應的格子位于玩家的視線的前方,即,優(yōu)先加載位于玩家的視線的前方的格子中的物件的配置數(shù)據(jù)。
在現(xiàn)有技術中,需要加載虛擬場景中全部格子(在本例子中為225個格子)中的物件的配置數(shù)據(jù),而在本發(fā)明實施例,只需要加載N(例如N=9、25等)個格子中的物件的配置數(shù)據(jù),因此,需要加載的數(shù)據(jù)量大大較少,避免了加載虛擬場景時卡頓,也降低了對終端的要求。
本方案可以應用在游戲的大規(guī)模野外游戲場景中,在不影響游戲場景的視覺效果的前提下,可以大幅度減少內(nèi)存的占有量、CPU和GPU開銷,提高游戲性能。
使用該技術對虛擬場景的編輯,只需要在制作虛擬場景時對物件按照細節(jié)等級進行劃分,例如劃分為基礎顯示層、建筑層和細節(jié)層,按照規(guī)則擺放到對應的節(jié)點下就可以,如圖7所示。虛擬場景擺放完成后,需要配置虛擬場景細節(jié)的裁剪參數(shù),如圖8所示。制作完成后導出虛擬場景物件和相對應的格子配置,在虛擬場景編輯器調(diào)用如圖9所示的工具即可導出所需要的數(shù)據(jù)。
在手機上進行測試,得出現(xiàn)有技術中使用Unity引擎原始做法,虛擬場景在加載完成后需要943M左右的內(nèi)存,加載過程需要等待36s;使用本發(fā)明實施提供的方法加載完成后需要內(nèi)存244M,加載過程需要等待8s,這充分說明,使用本發(fā)明實施提供的方法使虛擬場景在配置比較低的手機上也可以流暢運行,提升了用戶體驗,降低了對終端的要求。
在本發(fā)明實施例中,利用導出的虛擬場景格子數(shù)據(jù),還可以對虛擬場景進行管理。也可以只導出物件數(shù)據(jù),然后使用該數(shù)據(jù)動態(tài)生成虛擬場景樹(如四叉樹和八叉樹)。
本發(fā)明實施例提供的方法不僅適用于大的虛擬場景,也可以用于常規(guī)虛擬場景和小副本虛擬場景,在加載界面立即完成所有物件的加載,停止虛擬場景樹的構建和更新,可以將安裝包的數(shù)據(jù)量變小,并避免虛擬場景物件的重復打包。
需要說明的是,對于前述的各方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領域技術人員應該知悉,本發(fā)明并不受所描述的動作順序的限制,因為依據(jù)本發(fā)明,某些步驟可以采用其他順序或者同時進行。其次,本領域技術人員也應該知悉,說明書中所描述的實施例均屬于優(yōu)選實施例,所涉及的動作和模塊并不一定是本發(fā)明所必須的。
通過以上的實施方式的描述,本領域的技術人員可以清楚地了解到根據(jù)上述實施例的方法可借助軟件加必需的通用硬件平臺的方式來實現(xiàn),當然也可以通過硬件,但很多情況下前者是更佳的實施方式?;谶@樣的理解,本發(fā)明的技術方案本質(zhì)上或者說對現(xiàn)有技術做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)(如ROM/RAM、磁碟、光盤)中,包括若干指令用以使得一臺終端設備(可以是手機,計算機,服務器,或者網(wǎng)絡設備等)執(zhí)行本發(fā)明各個實施例所述的方法。
根據(jù)本發(fā)明實施例,還提供了一種用于實施上述虛擬場景的加載方法的虛擬場景的加載裝置。圖10是根據(jù)本發(fā)明實施例的一種可選的虛擬場景的加載裝置的示意圖,如圖10所示,該裝置可以包括第一檢測單元10、獲取單元20、第一加載單元30。
第一檢測單元10,用于檢測是否需要對待加載的虛擬場景進行加載。
獲取單元20,用于在第一檢測單元10檢測到需要對待加載的虛擬場景進行加載時,獲取待加載的虛擬場景的配置文件,其中,配置文件用于記錄虛擬場景資源塊的配置數(shù)據(jù),待加載的虛擬場景在二維平面上被劃分為多個虛擬場景資源塊。
第一加載單元30,用于加載配置文件中記錄的多個虛擬場景資源塊中的目標虛擬場景資源塊的配置數(shù)據(jù)。
可選地,第一加載單元30包括獲取子單元、存放子單元、第一加載子單元。
獲取子單元,用于獲取目標虛擬場景資源塊中每個待加載物件的配置數(shù)據(jù)。存放子單元,用于將每個待加載物件的配置數(shù)據(jù)存入到加載隊列中。第一加載子單元,用于加載加載隊列中待加載物件的配置數(shù)據(jù)。
可選地,第一加載單元30包括更新子單元、篩選子單元、第二加載子單元。更新子單元,用于根據(jù)玩家的位置更新四叉樹,其中,四叉樹的每個葉子節(jié)點對應一個格子。篩選子單元,用于篩選出與玩家之間的距離滿足預設條件的N個格子對應的葉子節(jié)點,得到N個葉子節(jié)點。第二加載子單元,用于加載N個葉子節(jié)點所對應的格子中物件的配置數(shù)據(jù)。
可選地,裝置還包括排序單元。排序單元,用于在篩選子單元得到N個葉子節(jié)點之后,根據(jù)所對應的格子與玩家之間的相對位置,對N個葉子節(jié)點進行排序,得到第1葉子節(jié)點至第N葉子節(jié)點。第一加載單元30包括第三加載子單元。第三加載子單元,用于按照第1葉子節(jié)點至第N葉子節(jié)點的順序,加載N個葉子節(jié)點所對應的格子中物件的配置數(shù)據(jù)。
可選地,第1葉子節(jié)點所對應的格子為玩家所處的格子,第2葉子節(jié)點所對應的格子位于玩家的視線的前方。
可選地,裝置還包括判斷單元、更新單元、清除單元。判斷單元,用于在更新子單元根據(jù)玩家的位置更新四叉樹之后,判斷玩家所在的第一虛擬場景是否切換為第二虛擬場景。更新單元,用于如果判斷單元判斷出玩家所在的第一虛擬場景沒有切換到第二虛擬場景,則更新玩家在第一虛擬場景中的位置。清除單元,用于如果判斷單元判斷出玩家所在的第一虛擬場景切換到第二虛擬場景,則清除已經(jīng)加載的第一虛擬場景的配置數(shù)據(jù)。
可選地,裝置還包括第二加載單元、第二檢測單元、解析單元、構建單元。第二加載單元,用于在第一檢測單元10檢測是否需要對待加載的虛擬場景進行加載之前,加載目標虛擬場景的配置數(shù)據(jù),目標虛擬場景包括待加載的虛擬場景。第二檢測單元,用于檢測加載的配置數(shù)據(jù)是否正確。解析單元,用于在加載的配置數(shù)據(jù)正確的情況下,解析加載的配置數(shù)據(jù)中的物件和格子數(shù)據(jù)。構建單元,用于根據(jù)解析出的物件和格子數(shù)據(jù)構建四叉樹。
根據(jù)本發(fā)明實施例,還提供了一種用于實施上述虛擬場景的加載方法的服務器或終端。
圖11是根據(jù)本發(fā)明實施例的一種終端的結構框圖,如圖11所示,該終端可以包括:一個或多個(圖中僅示出一個)處理器201、存儲器203、以及傳輸裝置205(如上述實施例中的發(fā)送裝置),如圖11所示,該終端還可以包括輸入輸出設備207。
其中,存儲器203可用于存儲軟件程序以及模塊,如本發(fā)明實施例中的虛擬場景的加載方法和裝置對應的程序指令/模塊,處理器201通過運行存儲在存儲器203內(nèi)的軟件程序以及模塊,從而執(zhí)行各種功能應用以及數(shù)據(jù)處理,即實現(xiàn)上述的虛擬場景的加載方法。存儲器203可包括高速隨機存儲器,還可以包括非易失性存儲器,如一個或者多個磁性存儲裝置、閃存、或者其他非易失性固態(tài)存儲器。在一些實例中,存儲器203可進一步包括相對于處理器201遠程設置的存儲器,這些遠程存儲器可以通過網(wǎng)絡連接至終端。上述網(wǎng)絡的實例包括但不限于互聯(lián)網(wǎng)、企業(yè)內(nèi)部網(wǎng)、局域網(wǎng)、移動通信網(wǎng)及其組合。
上述的傳輸裝置205用于經(jīng)由一個網(wǎng)絡接收或者發(fā)送數(shù)據(jù),還可以用于處理器與存儲器之間的數(shù)據(jù)傳輸。上述的網(wǎng)絡具體實例可包括有線網(wǎng)絡及無線網(wǎng)絡。在一個實例中,傳輸裝置205包括一個網(wǎng)絡適配器(Network Interface Controller,NIC),其可通過網(wǎng)線與其他網(wǎng)絡設備與路由器相連從而可與互聯(lián)網(wǎng)或局域網(wǎng)進行通訊。在一個實例中,傳輸裝置205為射頻(Radio Frequency,RF)模塊,其用于通過無線方式與互聯(lián)網(wǎng)進行通訊。
其中,具體地,存儲器203用于存儲應用程序。
處理器201可以通過傳輸裝置205調(diào)用存儲器203存儲的應用程序,以執(zhí)行下述步驟:
檢測是否需要對待加載的虛擬場景進行加載;在檢測到需要對所述待加載的虛擬場景進行加載時,獲取所述待加載的虛擬場景的配置文件,其中,所述配置文件用于記錄虛擬場景資源塊的配置數(shù)據(jù),所述待加載的虛擬場景在二維平面上被劃分為多個虛擬場景資源塊;加載所述配置文件中記錄的所述多個虛擬場景資源塊中的目標虛擬場景資源塊的配置數(shù)據(jù)。
處理器201還用于執(zhí)行下述步驟:獲取所述目標虛擬場景資源塊中每個待加載物件的配置數(shù)據(jù);將所述每個待加載物件的配置數(shù)據(jù)存入到加載隊列中;加載所述加載隊列中所述待加載物件的配置數(shù)據(jù)。
處理器201還用于執(zhí)行下述步驟:根據(jù)玩家的位置更新四叉樹,其中,所述四叉樹的每個葉子節(jié)點對應一個格子;篩選出與所述玩家之間的距離滿足預設條件的N個格子對應的葉子節(jié)點,得到N個葉子節(jié)點;加載所述N個葉子節(jié)點所對應的格子中物件的配置數(shù)據(jù)。
處理器201還用于執(zhí)行下述步驟:根據(jù)所對應的格子與所述玩家之間的相對位置,對所述N個葉子節(jié)點進行排序,得到第1葉子節(jié)點至第N葉子節(jié)點;加載所述N個葉子節(jié)點所對應的格子中物件的配置數(shù)據(jù)包括:按照所述第1葉子節(jié)點至所述第N葉子節(jié)點的順序,加載所述N個葉子節(jié)點所對應的格子中物件的配置數(shù)據(jù)。
處理器201還用于執(zhí)行下述步驟:判斷所述玩家所在的第一虛擬場景是否切換為第二虛擬場景;如果判斷出所述玩家所在的所述第一虛擬場景沒有切換到所述第二虛擬場景,則更新所述玩家在所述第一虛擬場景中的位置;如果判斷出所述玩家所在的所述第一虛擬場景切換到所述第二虛擬場景,則清除已經(jīng)加載的所述第一虛擬場景的配置數(shù)據(jù)。
處理器201還用于執(zhí)行下述步驟:加載目標虛擬場景的配置數(shù)據(jù),所述目標虛擬場景包括所述待加載的虛擬場景;檢測加載的所述配置數(shù)據(jù)是否正確;在加載的所述配置數(shù)據(jù)正確的情況下,解析加載的所述配置數(shù)據(jù)中的物件和格子數(shù)據(jù);根據(jù)解析出的物件和格子數(shù)據(jù)構建四叉樹。
可選地,本實施例中的具體示例可以參考上述實施例中所描述的示例,本實施例在此不再贅述。
本領域普通技術人員可以理解,圖11所示的結構僅為示意,終端可以是智能手機(如Android手機、iOS手機等)、平板電腦、掌上電腦以及移動互聯(lián)網(wǎng)設備(Mobile Internet Devices,MID)、PAD等終端設備。圖11其并不對上述電子裝置的結構造成限定。例如,終端還可包括比圖11中所示更多或者更少的組件(如網(wǎng)絡接口、顯示裝置等),或者具有與圖11所示不同的配置。
本領域普通技術人員可以理解上述實施例的各種方法中的全部或部分步驟是可以通過程序來指令終端設備相關的硬件來完成,該程序可以存儲于一計算機可讀存儲介質(zhì)中,存儲介質(zhì)可以包括:閃存盤、只讀存儲器(Read-Only Memory,ROM)、隨機存取器(Random Access Memory,RAM)、磁盤或光盤等。
本發(fā)明的實施例還提供了一種存儲介質(zhì)。可選地,在本實施例中,上述存儲介質(zhì)可以用于執(zhí)行虛擬場景的加載方法的程序代碼。
可選地,在本實施例中,上述存儲介質(zhì)可以位于上述實施例所示的網(wǎng)絡中的多個網(wǎng)絡設備中的至少一個網(wǎng)絡設備上。
可選地,在本實施例中,存儲介質(zhì)被設置為存儲用于執(zhí)行以下步驟的程序代碼:
S1,檢測是否需要對待加載的虛擬場景進行加載;
S2,在檢測到需要對所述待加載的虛擬場景進行加載時,獲取所述待加載的虛擬場景的配置文件,其中,所述配置文件用于記錄虛擬場景資源塊的配置數(shù)據(jù),所述待加載的虛擬場景在二維平面上被劃分為多個虛擬場景資源塊;
S3,加載所述配置文件中記錄的所述多個虛擬場景資源塊中的目標虛擬場景資源塊的配置數(shù)據(jù)。
可選地,存儲介質(zhì)還被設置為存儲用于執(zhí)行以下步驟的程序代碼:獲取所述目標虛擬場景資源塊中每個待加載物件的配置數(shù)據(jù);將所述每個待加載物件的配置數(shù)據(jù)存入到加載隊列中;加載所述加載隊列中所述待加載物件的配置數(shù)據(jù)。
可選地,存儲介質(zhì)還被設置為存儲用于執(zhí)行以下步驟的程序代碼:根據(jù)玩家的位置更新四叉樹,其中,所述四叉樹的每個葉子節(jié)點對應一個格子;篩選出與所述玩家之間的距離滿足預設條件的N個格子對應的葉子節(jié)點,得到N個葉子節(jié)點;加載所述N個葉子節(jié)點所對應的格子中物件的配置數(shù)據(jù)。
可選地,存儲介質(zhì)還被設置為存儲用于執(zhí)行以下步驟的程序代碼:根據(jù)所對應的格子與所述玩家之間的相對位置,對所述N個葉子節(jié)點進行排序,得到第1葉子節(jié)點至第N葉子節(jié)點;加載所述N個葉子節(jié)點所對應的格子中物件的配置數(shù)據(jù)包括:按照所述第1葉子節(jié)點至所述第N葉子節(jié)點的順序,加載所述N個葉子節(jié)點所對應的格子中物件的配置數(shù)據(jù)。
可選地,存儲介質(zhì)還被設置為存儲用于執(zhí)行以下步驟的程序代碼:判斷所述玩家所在的第一虛擬場景是否切換為第二虛擬場景;如果判斷出所述玩家所在的所述第一虛擬場景沒有切換到所述第二虛擬場景,則更新所述玩家在所述第一虛擬場景中的位置;如果判斷出所述玩家所在的所述第一虛擬場景切換到所述第二虛擬場景,則清除已經(jīng)加載的所述第一虛擬場景的配置數(shù)據(jù)。
可選地,存儲介質(zhì)還被設置為存儲用于執(zhí)行以下步驟的程序代碼:加載目標虛擬場景的配置數(shù)據(jù),所述目標虛擬場景包括所述待加載的虛擬場景;檢測加載的所述配置數(shù)據(jù)是否正確;在加載的所述配置數(shù)據(jù)正確的情況下,解析加載的所述配置數(shù)據(jù)中的物件和格子數(shù)據(jù);根據(jù)解析出的物件和格子數(shù)據(jù)構建四叉樹。
可選地,本實施例中的具體示例可以參考上述實施例中所描述的示例,本實施例在此不再贅述。
可選地,在本實施例中,上述存儲介質(zhì)可以包括但不限于:U盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、移動硬盤、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
上述本發(fā)明實施例序號僅僅為了描述,不代表實施例的優(yōu)劣。
上述實施例中的集成的單元如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在上述計算機可讀取的存儲介質(zhì)中?;谶@樣的理解,本發(fā)明的技術方案本質(zhì)上或者說對現(xiàn)有技術做出貢獻的部分或者該技術方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在存儲介質(zhì)中,包括若干指令用以使得一臺或多臺計算機設備(可為個人計算機、服務器或者網(wǎng)絡設備等)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。
在本發(fā)明的上述實施例中,對各個實施例的描述都各有側重,某個實施例中沒有詳述的部分,可以參見其他實施例的相關描述。
在本申請所提供的幾個實施例中,應該理解到,所揭露的客戶端,可通過其它的方式實現(xiàn)。其中,以上所描述的裝置實施例僅僅是示意性的,例如所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,單元或模塊的間接耦合或通信連接,可以是電性或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。
另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現(xiàn),也可以采用軟件功能單元的形式實現(xiàn)。
以上所述僅是本發(fā)明的優(yōu)選實施方式,應當指出,對于本技術領域的普通技術人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應視為本發(fā)明的保護范圍。