最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

六邊形網(wǎng)格地形系統(tǒng)(上)

2022-11-23 18:31 作者:獨立游戲人-老雷  | 我要投稿

前言

今天給大家分享的是六邊形網(wǎng)格地形系統(tǒng)的原理和技術(shù)實現(xiàn)。大家如果聽過我們前面課程的話,會知道之前我還講過一個四邊形的網(wǎng)格地形系統(tǒng)。今天的六邊形網(wǎng)格地形系統(tǒng)屬于另外一種網(wǎng)格地形系統(tǒng),是很多策略或戰(zhàn)旗類游戲當(dāng)中非常常用的一種

版權(quán)聲明

  • 本文為“優(yōu)夢創(chuàng)客”原創(chuàng)文章,您可以自由轉(zhuǎn)載,但必須加入完整的版權(quán)聲明

  • 更多學(xué)習(xí)資源請加QQ:1517069595或WX:alice17173獲?。ㄆ髽I(yè)級性能優(yōu)化/熱更新/Shader特效/服務(wù)器/商業(yè)項目實戰(zhàn)/每周直播/一對一指導(dǎo))

  • 點贊、關(guān)注、分享可免費獲得配套學(xué)習(xí)資源

  • 點擊觀看完整視頻

給大家介紹一個非常經(jīng)典的例子。這個在你們心目當(dāng)中,六邊形地形系統(tǒng)一個經(jīng)典的游戲案例是什么呢?我相信很多同學(xué)都會認(rèn)同這個答案,就是《文明》系列


《文明》是一款什么游戲

  • 4X,是指在策略游戲當(dāng)中的一種系統(tǒng)概念,得名自4個相同以ex為開頭的英語單詞

    • eXplore(探索):派出斥候橫跨游戲地圖以探索周邊的版圖

    • eXpand(拓張):建立新定居地或增加原定居地的影響力以擴(kuò)張領(lǐng)土

    • eXterminate(征服):攻擊并征服其他競爭對手

  • 這個就是4X類型游戲的一個非常明顯的特征。4X策略游戲是目前SLG游戲里面一個重要的分支,究其原因不得不提到這個被稱為時光機(jī)器的游戲著作文明系列

  • 文明系列誕生之初,游戲業(yè)還處于混沌初開的時候。文明在1991年時發(fā)行他的第一代。這個時候的游戲市場,當(dāng)談到回合制游戲,就會想到日式游戲和日本游戲公司。舉個例子來說,就像早期的日本國民RPG:勇者斗惡龍,后來的最終幻想,以及后來橫空出世的風(fēng)靡全球的寶可夢系列。這個時候的游戲玩家和廠商在腦子里面都會有一個定式,就是:回合制游戲的精髓就是RPG

4X策略游戲與RPG策略游戲分庭抗禮

  • 1991年,文明世界誕生了。在文明世界里面有一個著名的口號叫做VENI VIDI VICI,即:“我來,我看見,我征服“。哪個玩家能夠拒絕在游戲世界里面成為凱撒大帝呢?因此,4X策略游戲開始逐漸的跟rpg策略游戲分庭抗禮

  • 自文明系列誕生,收獲了一批忠實的粉絲,比如一位國外的玩家,他在玩文明時,因為一個殘局,他把一個存檔整整玩了十年。目標(biāo)就是為了在游戲當(dāng)中征服全世界!所以說4X類型的游戲,它的史實感是其他游戲所無法比擬的,這也是4X類型游戲它的最大的魅力所在

  • 在很多的4X類型游戲的玩家口中,就會有這么一句話:天下財氣共十斗,文明獨占八斗,P社共和一斗,余者再分一斗

P社是策略游戲的主要開發(fā)商和發(fā)行商

  • 只要提到4X類型游戲,那么除了文明以外,P社也是很重要的一個4X游戲的開發(fā)商和發(fā)行商。它旗下有很多款的策略游戲,并主要以策略游戲開發(fā)為主的,但是大部分都是歷史題材

群星

  • 群星是P社旗下一款太空科幻策略游戲,可以在這個游戲里面探索巨大的星系,發(fā)起戰(zhàn)爭或者是通過外交行為來征服宇宙。這款游戲可以說是太空版的文明,這款游戲還可以支持steam創(chuàng)意工坊,大家可以找到其他玩家分享的各種mod

無盡帝國

  • 無盡帝國它是一款幻想類的4X策略游戲,它是以一個神秘世界為舞臺主軸。歷史背景是,這顆星球逐漸的寒冷化,因而逐步面臨滅亡星球被各種派系所掌控。為了追求糧食產(chǎn)業(yè)科學(xué),魔術(shù)以及財富而掙扎無盡

  • 無盡帝國具有獨特的一個戰(zhàn)斗系統(tǒng),你可以把游戲單位分配給軍隊,然后通過發(fā)出命令,讓軍隊沿著一個六邊形的游戲地圖來進(jìn)行移動。并且你也可以對他們發(fā)出各種各樣的戰(zhàn)斗指令

  • 無盡帝國在去年的11月份也做了一個官方的中文更新,那么我們國內(nèi)的玩家也可以更好的去體驗到這款游戲

大型策略游戲為何多用六邊形地形系統(tǒng)

為何策略游戲多用六邊形地形系統(tǒng)?是因為文明系列的出現(xiàn),其他策略類游戲因此而跟風(fēng)?其實兩個最基本的原因:

  • 方向選擇性更豐富。四邊形地形只有上下左右四個方向,而六邊形地形可以有六個方向

  • 到每個方向的距離是相等的。四邊形地形,它可能會存在一個所謂的斜方向。比如一個四邊形的一個地形,它通常是一個九宮格的結(jié)構(gòu),那么到橫向的方向跟到斜向的方向,它行走的距離不一樣。而六邊形地形,它到每一個方向的距離是相等的

如何實現(xiàn)六邊形地形系統(tǒng)

  • Part 1:六邊形格子

  • Part 2:六邊形網(wǎng)格

  • Part 3:六邊形地形尋路

項目演示

  • 這是一個項目演示,你可以在游戲當(dāng)中設(shè)置一些障礙,然后指定一個目標(biāo)點,那么這個游戲角色可以繞過這個障礙,去到達(dá)這個目標(biāo)點,這就是實現(xiàn)了六邊形地形系統(tǒng)的一個網(wǎng)格尋路

Part 1:六邊形格子

  • 無論是做任何的地形系統(tǒng)或者寫任何的程序,首先都需要去定義好程序里面的數(shù)據(jù)結(jié)構(gòu)。就比如游戲里面的角色,我要定義好這個角色的數(shù)據(jù)結(jié)構(gòu)是什么樣的,它可能會包含這個角色的基本的姓名、ID號、所在門派、血值魔法值等

如何判定鼠標(biāo)是否位于六邊形格子內(nèi)

建立六邊形地形系統(tǒng),首先我們要知道這個地形系統(tǒng)里面的每一個格子是什么樣的。因此我們需要三個步驟,去實現(xiàn)這個目標(biāo)的判定:

  • Step 1:定義格子數(shù)據(jù)結(jié)構(gòu),并計算頂點位置

  • Step 2:判定鼠標(biāo)是否在六邊形包圍盒內(nèi)。六邊形包圍是六邊形的一個外框

  • Step 3:精確判定是否在六邊形四個角范圍內(nèi)

?六邊形包圍盒
  • 當(dāng)同時滿足在包圍盒內(nèi),又滿足在四個角的范圍內(nèi),那么就跟六邊形格子碰撞,若不在包圍盒范圍內(nèi),就不可能在這個四個角的這個范圍內(nèi),這樣就省略了第三步的判斷,可以提高六邊形判定的性能

Step 1:定義格子數(shù)據(jù)結(jié)構(gòu),并計算頂點位置


1.基本原理

  • 我們通常把整個六邊形的寬和高定義為單位1大小。中心的點到左右邊界的距離等于半個包圍盒的大??;右上角upperRightCorner從中心點出發(fā)的高度quarterSize等于1/4包圍盒的大??;正上角upperCorner從中心點出發(fā)的高度等于1/2包圍盒的大??;其余點同理

2.定義六個頂點,并計算頂?shù)孜恢?/h1>
  • 以正上角upperCorner為例,正上角實際上等同于中心點往上偏移,偏移的量是包圍盒大小的一半,等于半徑的大小,因此通過中心點坐標(biāo)加上往上偏移的量就能夠得到正上角坐標(biāo),偏移的量等于半徑大小的一倍。其他點坐標(biāo)的計算方式同理

  • 注意,在unity當(dāng)中,地面是平躺在整個游戲世界里面的。對于unity而言,我們的頭頂方向代表y軸方向,而我們地面的橫方向代表它的x軸方向,縱方向代表它的z軸方向

3.補(bǔ)充所有頂點的位置


4.測試輸出結(jié)果


Step 2:判定鼠標(biāo)是否在六邊形包圍盒內(nèi)


1.原理圖

  • 我們的總體目標(biāo)是要判斷任何一個點是不是在六邊形的格子范圍內(nèi),因此首先第一步,先判斷任一點是不是在六邊形的外接包圍盒的范圍內(nèi)。通過簡單的方法去篩選掉那些根本就不在包圍盒范圍的點,這樣可以提高我們的判定效率

2.判斷是否在左右水平邊界內(nèi):

  • 判斷鼠標(biāo)位置的X坐標(biāo),如果它小于六邊形右上角坐標(biāo)的X值又大于六邊形左上角坐標(biāo)的X值,那就說明這個點是在六邊形的外接四邊形的縱向范圍內(nèi),即X范圍內(nèi),因此可以將鼠標(biāo)渲染為綠色

  • 除了要判斷鼠標(biāo)點是否在x值最小值和x值最大值范圍內(nèi),還要判斷鼠標(biāo)點是否在縱向方向的最小范圍和最大范圍以內(nèi)

2.1.補(bǔ)充代碼


訓(xùn)練營

  • 由于代碼太多屏幕裝不下就不附上了,大家如果需要的話呢,可以參考我們的這個六邊形地形系統(tǒng)的訓(xùn)練營

  • 那么我們的訓(xùn)練,老師會營通過三天的代碼實戰(zhàn),帶大家一步一步的去完成這個代碼的編寫,讓大家能看到每一步的具體的過程

  • 在訓(xùn)練營當(dāng)中,我會給大家去做一個相關(guān)的六邊形地形系統(tǒng)的詳解,內(nèi)容是非常深入淺出的,包括后面一個具體的代碼實現(xiàn)。大家需要的話呢,可以加文末的Alice老師來了解我們的這個六邊形地形系統(tǒng)的訓(xùn)練營課程

Step 3:精確判定是否在六邊形四個角范圍內(nèi)


3.1 原理圖

  • 因為左下角右下角判定方式都是基本上差不多的,所以以右上角為例,首先取得右上角這個點的一個坐標(biāo)和正上角的坐標(biāo),兩個點的坐標(biāo)相減得到藍(lán)色向量

  • 我們需要有一條垂直于藍(lán)色向量的向量,因此將藍(lán)色向量逆時針偏轉(zhuǎn)90°得到綠色向量,在unity中需要調(diào)用ApplyRotationToVectorXZ這個方法實現(xiàn)對藍(lán)色向量的偏轉(zhuǎn)

  • 假設(shè)鼠標(biāo)點在x位置,用鼠標(biāo)點位置減去右上角的位置得到紫色向量,只要判定紫色向量跟綠色向量,它們之間的夾角如果小于正負(fù)90度,那么它就是在右上角的這條線范圍以內(nèi)

  • 我們可以通過點乘運算,算出來綠色向量,跟紫色向量,它們之間的夾角夾角是否小于正負(fù)90度,因為如果小于正負(fù)90度的話。那么它們的點乘值就是大于零的


3.2 代碼實現(xiàn)

  • 我們還需要完成其他角的判斷,但是由于各個角的計算原理相同就不加贅述。當(dāng)你完成所有這些判定的時候,你就能夠精確的判定鼠標(biāo)是不是在六邊形的精選范圍以內(nèi)


寫在最后

  • 更多學(xué)習(xí)資源請加QQ:1517069595或WX:alice17173獲取(企業(yè)級性能優(yōu)化/熱更新/Shader特效/服務(wù)器/商業(yè)項目實戰(zhàn)/每周直播/一對一指導(dǎo))

  • 點贊、關(guān)注、分享可免費獲得配套學(xué)習(xí)資源


六邊形網(wǎng)格地形系統(tǒng)(上)的評論 (共 條)

分享到微博請遵守國家法律
日喀则市| 德令哈市| 泾川县| 尼玛县| 莫力| 洱源县| 广水市| 临高县| 甘谷县| 邵阳县| 鄄城县| 垦利县| 宜城市| 赤城县| 楚雄市| 湟中县| 苍梧县| 绥阳县| 乡城县| 邻水| 晴隆县| 磐安县| 台湾省| 永川市| 宜昌市| 偃师市| 芜湖市| 吴忠市| 黄浦区| 托里县| 闽侯县| 隆子县| 天峨县| 阆中市| 莆田市| 黄龙县| 东莞市| 新昌县| 张家界市| 江源县| 溧水县|