血條(Health Bar)的預製設計。具體要求如下
- 分別使用 IMGUI 和 UGUI 實現
- 使用 UGUI,血條是遊戲對象的一個子元素,任何時候需要面對主攝像機
- 分析兩種實現的優缺點
- 給出預製的使用方法
IMGUI
用scrollabr製作血條:
GUI.HorizontalScrollbar(new Rect(20, 20, 200, 20), 0.0f, bloodValue,0.0f, 1.0f, GUI.skin.GetStyle("HorizontalScrollbar"));
控制血量則使用Mathf.Lerp(min,max ,c):
bloodValue = Mathf.Lerp(bloodValue, tmpValue, 0.01f);
完整代碼:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class IMGUI : MonoBehaviour
{
public float bloodValue;
private float tmpValue;
void Start()
{
tmpValue = 0.0f;
bloodValue = 0.0f;
}
void OnGUI()
{
//點擊加血
if (GUI.Button(new Rect(250, 20, 40, 20), "+"))
{
tmpValue = 1.0f;
}
//點擊減血
if (GUI.Button(new Rect(250, 50, 40, 20), "-"))
{
tmpValue = 0.0f;
}
bloodValue = Mathf.Lerp(bloodValue, tmpValue, 0.01f);
GUI.color = Color.red; //血條,設置爲紅色
GUI.HorizontalScrollbar(new Rect(20, 20, 200, 20), 0.0f, bloodValue,0.0f, 1.0f, GUI.skin.GetStyle("HorizontalScrollbar"));
}
}
UGUI
遊戲對象使用一個cube,血條用Slider實現,結構如下:
對Slider的設置:
Max Value設置爲100 。
Fill的顏色改爲紅色:
Canvas的設置:
Slider的縮放比例:
實現血條一直面對主攝像機,只需在Canvas上掛載一個腳本:
void Update()
{
transform.rotation = Camera.main.transform.rotation;
}
優缺點
IMGUI
優點是實現簡單,比如繪製一個控件,只需要GUI.Lable()、GUI.Button()這樣即可,不需要使用UI組件,很容易上手。
缺點是不利於佈局,在協調對象之間的位置關係的時候會很麻煩,這樣維護起來也會很困難。還有不支持可視化,性能低下。
UGUI
優點是可視化,UGUI的控件是以“遊戲對象”的形式存在與遊戲場景中,這樣直觀易於使用,直接可以在Scene視圖中編輯大小、位置、旋轉角度、縮放等等,不需要手動寫任何代碼。效率也比較高。
缺點是比較難,學習成本高。
預製的使用方法
把對象拖進Perfabs文件夾,就可以得到預製,之後就可以直接拖出來用了。