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

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

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

?
很簡單吧,這個也不會的就去看看高中的數(shù)學(xué)吧。好了,再來說角度,這個稍微復(fù)雜一點,不過也難不倒我們。上代碼:

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

?
?關(guān)鍵的顯示代碼如上所示,其他的都很簡單。然后我們的需求就搞定了,沒毛??!大概就是這樣的一個操作過程,當(dāng)然這是一部分代碼,不能實現(xiàn)效果的,需要完整的代碼的朋友可以私信我哦,免費給大家,同時這個方法并不是很簡潔的,我這里還有更加優(yōu)化的方法,大家需要的話可以私信我哦!