[Unity] 製作圖像式的EXP bar

在遊戲裡面常會見到有經驗值或是HP的bar條,可以目視判斷你目前的狀況,那在Unity裡面要怎麼做呢?
很簡單,寫法就是以下這樣:
float exp_length;

// Code...

void OnGUI () {
    // not exactly write code in OnGUI(), you can write code in other method drawing view.
    GUI.[DrawTexture][1](new Rect(x, y, exp_length, height), texture2DObject);
}
第一個參數是Rect,你要指定bar的Rect大小,重點在width這個參數,可以讓它變動,這就是調整bar條長度的作法。第二個參數是圖片,是一個Texture2D類別的var。
但這種寫法是有一點不甚理想的地方的,比方說,你的bar條是有花紋的,末端是圓頭的,那麼當你用這種寫法去顯示時,你會發現整個bar條圖片被壓短的感覺,顯示上可能不盡理想,如果你的bar條是單一顏色形狀固定,那這個寫法就很好用了,但如果你遇到的狀況跟我一樣呢?
GUI.DrawTexture還是可以用的,只是要多用幾個參數:
GUI.DrawTexture(new Rect (x, y, exp_length, height), texture2DObject, ScaleMode.ScaleAndCrop, true, 0);
多的第一個參數是ScaleMode,它有三種enum可選:
第二個是會依照你給的寬高比例去調整圖形,第三個會改變圖形的比例尺,我選第一個,他會保持原始的圖形比例去填滿Rect的範圍,多出的會裁切掉,效果是我要的。
第三個參數是alphaBlend,我讓它保持預設值。第四個是imageAspect,0是預設值,就是使用圖形原始的比例,否則你可輸入新的w/h比值。

第三種方法我想是更好的,此方法使用的API跟第二種很像,我們先看一下寫法:

Texture tex = Resources.Load (// path....);
GUI.DrawTextureWithTexCoords (new Rect (x, y, tex.width * (currentEX / maxEX) , tex.height), tex,
                                       new Rect (0, 0, (float)(currentEX / maxEX), 1f));

假設你要貼的Ex bar是橫的,以上的寫法就是你要的。請注意,第一個參數和第三個參數的寬度都要調整,如果第一個參數給的寬度就是圖的寬度(最大寬度),那你貼進去的圖就會被放大,此方法特別適用於有花紋的bar圖,重點在於你要讓你要貼進去的空間大小跟你截出來的圖一樣大,這樣的話就不會有縮放問題了,所以你會看到我把參數一三的寬度都設定成變動的。如果不是很了解的話,你可以把(currentEX / maxEX)這部分設定成一個public變數實際在play時去拉動觀察看看。若你還是不太會,也可以參考我這篇說明

好了,如果你有其他更好的方法,歡迎分享。

留言