RPG/ MMORPG游戲動(dòng)態(tài)尋路指示標(biāo)
相信大家都玩過(guò)RPG或者M(jìn)MORPG類(lèi)型的游戲,就算沒(méi)有玩過(guò),也應(yīng)該見(jiàn)過(guò)別人玩,這種游戲其中就有一些尋路的模塊。比如新手指引任務(wù),你點(diǎn)擊了新手指引,然后就會(huì)自動(dòng)尋路過(guò)去,為了讓游戲更加有體驗(yàn)感,那么我們可以看到有尋路的指示標(biāo)會(huì)出現(xiàn),并且它會(huì)指引我們玩目的地走去。而且你中途停下,或者去做其他事情,它還是會(huì)指示你往任務(wù)的目的地去,除非取消任務(wù)。并且隨著你的移動(dòng),你的位置發(fā)生變化,指示標(biāo)也會(huì)自動(dòng)的改變角度啊,距離啊這些。那么這就是RPG/MMORPG游戲非常有特色的一個(gè)功能了,這個(gè)功能應(yīng)該怎么做呢?用unity能做出來(lái)嗎?我們今天就要在unity里面來(lái)實(shí)現(xiàn)這樣的一個(gè)功能。
話(huà)不多說(shuō),先上圖:

這就是一個(gè)簡(jiǎn)單的尋路指示標(biāo)的demo,素材比較簡(jiǎn)陋,而且指示標(biāo)方向也有點(diǎn)問(wèn)題,換個(gè)紋理就可以了,問(wèn)題不大,不要介意,好了,那么我們?cè)趺窗阉鼘?shí)現(xiàn)呢?不要著急,先說(shuō)下原理,再上代碼。
尋路的方法有很多種,A*,unity導(dǎo)航網(wǎng)格等等的都可以,我這里用的是unity自帶的導(dǎo)航網(wǎng)格尋路組件。OK,我們一步一步來(lái)看。首先,搭建一個(gè)場(chǎng)景,這個(gè)就不說(shuō)了,很簡(jiǎn)單。嗯,尋路指示標(biāo)的原理就是需要得到尋路起點(diǎn),然后得到終點(diǎn)。最后在這兩點(diǎn)之間來(lái)弄一些指示的地標(biāo),來(lái)讓玩家知道這是我們移動(dòng)的方向。這個(gè)的實(shí)現(xiàn)的方法也有多種。找到適合自己的就是最好的,哈哈。好了,首先手圖中的粉色的線(xiàn)條,很明顯,大部分朋友應(yīng)該能看出來(lái),這是用unity的線(xiàn)渲染器組件(LineRender)來(lái)繪制的,那么這是怎么畫(huà)出來(lái)的呢。OK,我們知道unity尋路組件里面可以獲取你烘焙過(guò)后的地圖里你要導(dǎo)航的路徑點(diǎn),其中的一些關(guān)鍵的拐點(diǎn),都可以獲得,那么我們就可以用線(xiàn)渲染器來(lái)把它們繪制出來(lái),這樣粉色的路徑路線(xiàn)就呈現(xiàn)在我們眼前了,關(guān)鍵代碼如下:

我這里用的是射線(xiàn)檢測(cè)來(lái)獲取目的地,然后用導(dǎo)航網(wǎng)格組件里的函數(shù)移動(dòng),那么如果我們的路徑點(diǎn)個(gè)數(shù)大于1個(gè),我們就開(kāi)始來(lái)獲取所有的點(diǎn),再一一的連接起來(lái)。為什么可以這么做呢,因?yàn)榫€(xiàn)渲染器可以畫(huà)多條線(xiàn),把他們連接起來(lái)。好了,這個(gè)粉色的路徑線(xiàn)搞定,非常簡(jiǎn)單吧。然后我們?cè)僬f(shuō)下比較難一些的指示標(biāo),這個(gè)其實(shí)也很簡(jiǎn)單。OK,先說(shuō)下需求,因?yàn)榇蟛糠值挠螒蛑?,指示?biāo)都是可以動(dòng)態(tài)改變長(zhǎng)度和角度的,所以我們要做的就是這樣的,那么方法也有很多,我這里用的是一個(gè)Plane(俗稱(chēng)地板),然后給它上材質(zhì),這里要注意一點(diǎn),我們需要把它做成預(yù)制體,然后plane的大小要調(diào)小點(diǎn),和Cube一樣大就可以了,這個(gè)看大家不一樣的需求。然后把它渲染組件里的材質(zhì)里面的shader改成Mobile/Particals/Alpha Blending。這個(gè)就是Alpha通道的常規(guī)顏色混合,在這里不細(xì)說(shuō),選這個(gè)就對(duì)了。OK,原理是怎么樣的呢?就是我們?cè)谖覀兊玫搅似瘘c(diǎn)和終點(diǎn)的距離后,我們就需要生成一個(gè)這樣的預(yù)制體,然后把這個(gè)距離給它的圖片的紋理的X和Y的比例,也就是Tiling屬性里面的值,根據(jù)自己實(shí)際的情況賦值即可,我這里是把距離賦值給Y,然后這個(gè)距離怎么得到的呢,方法很多種,
這里用的一手勾股定理,數(shù)學(xué)不會(huì)的同學(xué)可能都忘了這個(gè)了是吧,很正常哈哈。上代碼:

很簡(jiǎn)單吧,這個(gè)也不會(huì)的就去看看高中的數(shù)學(xué)吧。好了,再來(lái)說(shuō)角度,這個(gè)稍微復(fù)雜一點(diǎn),不過(guò)也難不倒我們。上代碼:

看到這里,估計(jì)有很多朋友心態(tài)崩了對(duì)吧。早知道要好好學(xué)數(shù)學(xué)了。問(wèn)題不大哈,這還是很簡(jiǎn)單的數(shù)學(xué)方面的東西,學(xué)了Shader后才知道數(shù)學(xué)的重要性!注釋我都寫(xiě)了,應(yīng)該沒(méi)什么問(wèn)題。這是關(guān)鍵的兩步,好了,然后有了這兩個(gè),我們就需要把指示標(biāo)畫(huà)出來(lái)了,怎么弄呢。注釋都有,上代碼:

關(guān)鍵的顯示代碼如上所示,其他的都很簡(jiǎn)單。然后我們的需求就搞定了。大概就是這樣的一個(gè)操作過(guò)程,當(dāng)然這是一部分代碼,不能實(shí)現(xiàn)效果的。
更多資源請(qǐng)點(diǎn)擊:https://bycwedu.vipwan.cn/promotion_channels/630597732