1. 程式人生 > >Unity3D——使用UGUI為角色新增名字和血條

Unity3D——使用UGUI為角色新增名字和血條

轉載http://www.jianshu.com/p/a9fd13594f18

       學習Unity3D有一段時間了,龐大的U3D系統可能只學了一些皮毛。最近做東西時又要為怪物製作血條,但一時間竟然忘記了該怎麼弄,於是翻翻以前的專案,同時在這裡記下來,作為學習參考。

       在這裡我使用的是之前學習的時候自己做的一個官方案例《噩夢射手》的加強版本作為參考素材,而UGUI是unity4.6及以上版本才有的功能。那麼,話不多說(阿蠢:=_=你已經說了很多了...)

        首先,我們開啟Unity3D,在自己的專案中建立一個角色物件,可以用cube之類的代替。這裡我放置了3個怪物物件

以及1個主角物件(阿蠢:沒圖說個%&*¥¥@),好吧,上圖。


        那麼,接下來,就是給每個角色新增一個Canvas元件,選中角色物件,右鍵—UI—Canvas,讓Canvas作為角色子物體,此時,你應該看到一個充滿遊戲介面的Canvas,太大了……(阿蠢:啪!這特麼不是廢話麼!)別急別急,馬上解決。我們選中Canvas,將Canvas中的Canvas元件的Render Mode設為World Space,再將其Transform屬性的Width和height分別設定為20,10(阿蠢:憑什麼聽你的,我的屬性值我自己調!)經過調整,這時候應該就好多了吧。不過記得也要調整Canvas的位置。


        關於Canvas呢,是我們在建立UGUI物件的時候,必須有的一個東西,如同畫畫,除了畫筆,也要有畫布才能在上面作畫,同時我們建立UGUI物件的時候,也會生成一個EventSystem物件,伴隨Canvas的一起出現,要多瞭解的話,哼哼,去百度吧(阿蠢:不知道就是不知道,沒事你裝什麼裝-_=!)

        那麼,現在,就是開始正式的建立血條了。我們再Canvas下面建立一個Slider物件,右鍵-UI-Slider,這個沒忘吧(阿蠢:你當所有人都白痴嘛!!)那麼,現在是不是又有一個碩大的Slider呢?老樣子,選中Slider,調整Slider的Scale大小,X:0.02,Y:0.01

,同時調整Slider的位置以適應角色物件。(阿蠢:我說了我自己的屬性值我要自己調!)這裡,我們注意到Slider下面還有幾個子物體,這裡我們先去掉HandleSlideArea,這裡暫時不需要。然後,BackGround是我們Slider的背景,可以控制我們的血條的背景色,FillArea是我們血條的覆蓋色,在這個物件下面還有一個Fill物件,該物件有個Image元件,修改Imgae的Color就可以控制血條的覆蓋色了,這裡我們可以選擇自己的專案所適應的顏色來選擇不同的顏色。然後,我們回到Slider元件,我們再Inspector面板中找到Value屬性(阿蠢:你該上圖了,都說了幾百字了)


        這裡,我們看到有個Directon來控制血條的方向,Min Value表示最小值,Max Value表示最大值,我們先如圖設定為100,此時Value的滑塊跑到最左邊去了,那麼我們這裡滑動滑塊,就可以調整當前的血量值,來看看有沒有效果?

      注意,我們這裡如果添加了能移動的指令碼的話,會發現,當角色物件,旋轉的時候,我們的血條居然也跟著轉了!(阿蠢:我被你騙了,故事不是這樣的!)因為Canvas是作為物件的子物體,它的位置是基於父節點的變化而變化,那麼這裡,我們給Canvas新增一個指令碼,就叫做EnemyUiHP吧(阿蠢:我偏不,你個騙子!)。要寫的內容也不多


         我們再Update函式裡面添加了這樣一句話,是為了讓整個Canvas一直面朝著我們的攝像機,這樣無論角色再怎麼旋轉,我們從攝像機的角度看,面向我們的(指令碼中的using UnityEngine.UI是在需要再程式碼中使用UI物件的時候必須要的一個引用,這裡多餘了)。試試看吧(阿蠢:萬一又不對了呢?)。

          當然,這裡的血條還不完全算是血條,因為沒有捱打,沒有受傷,不會變化,怎麼當一個合格的血條君呢?那麼,在這裡做一個簡單的控制血條的方法,當我們的角色在收到傷害的時候,血量要減少,這是,我們可以新增這樣幾句程式碼


        這裡定義了hpUI物件為Slider元件currentHealth為當前血量,我們在指令碼初始化物件時,如再Start()或者Awake()函式中設定血量的初始值,可以先定義一個最大血量值:public float maxHealth=100,  在  Start()  中寫入   currentHealth=maxHealth;以及hpUi.maxValue=maxHealth;這樣使得血量的最大值就等於我們在指令碼中的設定的最大值,之後修改也方便。而如上圖在自己定義的受傷的函式中寫入hpUI.value=currentHealth。這樣當我們的當前血量減少的時候,血條的值也在跟著變化。注意,這裡我們使用的hpUI物件是Slider物件,也就是UI物件,這裡必須在指令碼前引用上面說到的using UnityEngine.UI,否則報錯(阿蠢:簡直可怕!)

        以上就是我們寫使用UGUI編寫血條的方法了。雖然廢話很多,但是為了清晰且方便剛學的小夥伴理解,就見諒了(阿蠢:行行行,原諒你了。)那麼這裡就給大家看看我自己做的最終效果版本,同樣的方法給角色添加了名字(良辰、美景、奈何天),以及同樣使用UGUI製作的小地圖等。那麼,1,2,3——


有不對的地方 or 有問題 or 有經驗 or 有建議的可以多多交流~(阿蠢:別逗了,你這麼懶,還會有力氣和別人交流?)



文/Wei_Boom(簡書作者)
原文連結:http://www.jianshu.com/p/a9fd13594f18
著作權歸作者所有,轉載請聯絡作者獲得授權,並標註“簡書作者”。