英雄聯盟的視野實現方式

2021-07-09 22:41:39 字數 1208 閱讀 1887

需求分析

在lol裡視野有幾種表現方式----

1.是草叢視野: 如果草叢沒有眼,則英雄a進入草叢後,敵方英雄無法看到a,友方英雄可以獲得a的視野。

2.是不在草叢時,如果有眼位,則友方英雄可以看到該視野,敵方英雄無法看到該視野。 如果有英雄存在,則友方英雄可以看到該視野,敵方英雄無法看到該視野。有友方防禦塔存在,則

則友方英雄可以看到該視野。

3.遭遇致盲性技能,比如男槍的w、永恆夢魘的r,則所有視野均不可見,只能看到自身的特定小範圍視野。

並且有一些限制條件-----

1.隱身的英雄可以被彈道技能擊中(由於飛行速度等,有可能是**實現,有可能是物理碰撞實現)。

2.表現方式上,沒有視野的敵方比較陰暗,有視野的敵方則高亮。靜態物,即使沒有視野,也可以看到,比如火堆等。

實現思路

首先,隱藏乙個物體,但是在物理上又能檢測到碰撞,那麼我們可以選擇兩種方式,第一種是取消render元件的實現,第二種呢,我們可以給每乙個物體分配乙個層級,當camera的視野層級包括該層級,則camera渲染它,否則不渲染它。

兩種方式暫時不去比較優劣性,根據專案需求使用吧。

實現了物體隱藏,再看如何在限制條件上實現表現方式。

我們把地圖上的所有的動態物體都編碼,簡單起見,從1開始一直遞增。

剩下的工作,就是計算每個單位的視野範圍內,存在的其他物體了,如果是網路遊戲,則這個計算要放在服務端。

服務端:

使用乙個單獨執行緒,可以迴圈判斷,也可以每當物體移動判斷。對所有動態物體迴圈,處於該動態物體的視野距離x以內的所有其他動態物體,根據敵方友方或者其他技能資訊,決定是否顯示該物體,顯示則返回為1,不顯示則返回0,迴圈完畢後,服務端傳送顯示列表到客戶端。其中,該動態物體迴圈函式,需要有乙個bool值,bool值為true才執行,比如男槍的w、永恆夢魘的r時,該函式不執行,只執行該技能的特有視野函式。

客戶端:

根據服務端的顯示列表顯示和隱藏物體。整個地圖,給予低暗度的環境光,對於動態物體的視野範圍,給予相同範圍x的點光源。

這樣即可完美還原lol的視野效果。

效能優化部分

對於pc版的moba遊戲,先合併共有視野範圍,然後再打燈光,可以減少燈光數量。

對於手機版本,則不使用區域性燈光,採用迷霧貼圖,來達到使地圖陰暗的渲染效果。

對於視野判斷,可以直接使用距離判斷,最為精確,如果地圖本身採用了a*演算法,地圖已經劃分了格仔,則可以採用格仔判斷方式,計算效能較高,但精度依賴格仔大小。

由《英雄聯盟》引發的思考

我經常會玩乙個遊戲,叫 英雄聯盟 乙個人獨來獨往,找不到人開黑,分段也上不去,不過自得其樂。如果是順風局的話,怎麼玩都可以,哪怕送人頭都可以 當然不是惡意送人頭,這裡指無意識,被人圍毆的那種 都沒有人怪你。但是碰到逆風局,就會有人投降 相互問候家裡人 掛機等出現。雖然我不會那麼做,但是有時候也會想放...

雜談 英雄聯盟的投降,你缺乏勇氣

20分鐘沒到,玩遊戲的人開始內訌,為什麼?真的放假多了,小學生多了嗎?在這樣玩遊戲的時候,最沒有耐心去玩下去的人就想著放棄和投降。這種事情見怪不怪,在經常的匹配場景,英雄聯盟不敢禁言,因為他們們覺得越罵越有意思。真的是這樣嗎?玩了很久,無論輸贏也好,玩的樂趣更為重要,輸贏也是。如果有禁言設定,請投票...

Docker在英雄聯盟遊戲中的實踐探索(一)

本文講的是docker在英雄聯盟遊戲中的實踐探索 一 編者的話 riot將docker和jenkins相結合,以此來構建流水線 pipeline 這篇部落格是riot實踐docker的系列部落格的第一篇,主要介紹了他們的目標和理念 後續部落格則以教程的形式一步一步地記錄riot的docker實踐。容...