使用IMGUI實現血條設計
- 設計兩個按鈕分別控制血量的增加和減少
- 爲了使血條平滑的變化,使用Mathr.Lerp來計算血量值
- 具體做法,新建一個空對象IMGUI-H-Bar,將如下腳本掛載到對象上:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine UI;
public class IMGUIxuetiao : MonoBehaviour {
public Slider slider;
private Rect health_pos; //血條位置
private Rect add_pos; // 加血按鈕位置
private Rect sub_pos; //減血按鈕位置
private float health = 0.0f; //血量
private float temp;
// Use this for initialization
void Start () {
addPos = new Rect(0, 0, 50, 25);
subPos = new Rect(50, 0, 50, 25);
}
// Update is called once per frame
void Update () {
}
private void OnGUI()
{
if (GUI.Button(add_pos, "加血"))
{
temp = health + 0.1f > 1.0f ? 1.0f : health + 0.1f;
} else if (GUI.Button(sub_pos, "減血"))
{
temp = health - 0.1f < 0 ? 0.0f: health - 0.1f;
}
health_pos = new Rect(Screen.width / 2 - 50, 0, 100, 50);
health = Mathf.Lerp(health, temp, 0.05f);
GUI.HorizontalScrollbar(health_pos, 0, health, 0, 1);
}
}
使用UGUI實現血條設計
- 導入遊戲對象,(我是從Assets Store中下載的小人),並拖入到場景中,命名爲Ethan
- 在Ethan中新建一個plane對象
- 在Ethan中添加一個子畫布(右鍵 -> UI -> Canvas)
- 在Canvas中添加滑條(右鍵 -> UI -> Slider)作爲血量條
設置Canvas的屬性如下:
- 設置Slider的屬性如下:
爲了讓UGUI和IMGUI同時出現在界面上,我們在腳本中新增一個Slider實例:
public Slider slider2;
slider2.value = health;
可以試着運行,更改血條變化:
爲了使血條任何時候都面對主攝像機,我們爲Canvas掛載如下腳本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LookAtMamera : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
this.transform.LookAt(Camera.main.transform.position);
}
}
兩種實現的優缺點
IMGUI的優點
- 符合傳統遊戲編程
- 把程序主動權掌握在編寫代碼的程序員手中,避免了UI元素在前端的更改
- 執行效率高
- 渲染效果好
IMGUI的缺點
- 調試相對比較困難,維護成本高
- 不利於設計佈局
- 渲染速度慢
UGUI的優點
- 可視化,易於設計和佈局
- 支持多模式、多攝像機渲染
- UI元素與遊戲場景融匯式交互
UGUI的缺點
- 學習成本高
- 對設備要求更高
預置的使用方法
- 直接將預製體對象拖入場景
- 用腳本導入場景
- 將Canvas預製體拖入場景,成爲遊戲對象的子對象
- 將Canvas的子對象Slider拖入腳本組件的Slider對象中