四叉樹是在二維中定位畫素的唯一適合的演算法。因為二維空間(圖經常被描述的方式)中,平面畫素可以重複的被分為四部分,樹的深度由、計算機記憶體和圖形的複雜度決定。
四叉樹(quad-tree)是一種資料結構,是一種每個節點最多有四個子樹的資料結構。四叉樹可以用來在資料庫中放置和定位檔案(稱作記錄或鍵)。這一演算法通過不停的把要查詢的記錄分成4部分來進行匹配查詢直到僅剩下一條記錄為止。在樹中,記錄被儲存在葉子的位置上。這一名字的由來是因為記錄被儲存在端點上,它們上面再沒有節點了。分支被稱作節點。數的順序是每節點的分支(也稱孩子)數。在四叉樹中,每個節點通常有4個孩子,因此順序是4。四叉樹的葉子數也是4。為達到想要的記錄所進行的查詢操作次數成為樹的深度。
四叉樹在遊戲場景中的應用非常普遍,比如大場景的物件動態載入,npc動態載入等,只用顯示玩家周圍的物件,能非常有效的降低場景cpu和gpu消耗。
四叉樹的查詢演算法,通過遍歷子節點只到找到與之相交的葉子節點,就不做記錄了,在這裡將玩家移動時,周圍物件顯示和隱藏的過程記錄下來,以便日後能快速回憶。
主角剛進入遊戲場景時
(藍色表示【玩家所在葉子節點】,綠色表示【進入列表
】,白色表示【顯示列表】)
焦點不動時
1.沒有【當前顯示列表】,那麼焦點周圍的點都為【進入列表】
2.【進入列表】中的葉子節點執行swapin方法加入【進入佇列】
重新整理佇列
3.如果葉子節點都執行過swapin,並且可見,就加入到當前【當前顯示列表】,並從【進入佇列】中移除
主角移動時
(綠色表示【進入列表】,紅色表示【出去列表】)
當焦點移動時
1.通過【當前顯示列表】和【距離】篩選出此時的【進入列表】和【出去列表】
2.【進入列表】中的葉子節點執行swapin方法加入【進入佇列】
3.【出去列表】中的葉子節點執行swapout方法加入【出去佇列】
重新整理佇列
4.如果葉子節點都執行過swapin,並且可見,就加入到當前【當前顯示列表】,並從【進入佇列】中移除
5.如果葉子節點都執行過swapout,並且不可見,就從【出去佇列】中移除
學習參考:
unity之載入場景
遊戲中的loading分為 靜態loading和動態loading。簡單形象的做個比喻 靜態loading可能就是一張背景圖。而動態的loading就是在讀取的同時有乙個東西在 轉圈 1.靜態loading 2.動態loading 一些常見問題 一.遊戲是否可以只做乙個場景?可以,執行 gameob...
Unity場景載入進度條優化
du先生開發遊戲 為了增加遊戲體驗,我在日常會對進度條進行優化。通常通過非同步的方式載入場景,從而獲取場景進度。為了增加遊戲體驗,會使用兩個變數乙個變數接受場景的實際載入進度,另外乙個用來接受ui顯示進度。使用顯示進度向實際進度靠近的方式顯示進度條。主要 如下 public slider slide...
unity 優化之六
優化方式 使用九宮,對稱貼圖 提高貼圖復用率 shader 利用shader合併貼圖通道,實現灰度圖等。alpha通道存alphatest和高光,貼圖乙個通道存陰影乙個通道存ao等,alpha通道存在貼圖的其他通道便於壓縮等等。這點在做軒轅傳奇的時候大幅使用。壓縮動畫減少關鍵幀 前面有介紹 及時解除...