视频:视频
代码:GitHub
IMGUI代码 IMGUI血条.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class IMGUI : MonoBehaviour {
public float bloodValue = 0.0f;
private float ResultValue;
private Rect rctBloodBar;
private Rect rctUpButton;
private Rect rctDownButton;
private bool onoff;
void Start()
{
//血条横向
rctBloodBar = new Rect(20, 20, 200, 20);
//加血-按钮
rctUpButton = new Rect(20, 50, 40, 20);
//减血-按钮
rctDownButton = new Rect(70, 50, 40, 20);
ResultValue = bloodValue;
}
void OnGUI()
{
if (GUI.Button(rctUpButton, "加血"))
{
ResultValue += 0.1f;
}
if (GUI.Button(rctDownButton, "减血"))
{
ResultValue -= 0.1f;
}
if (ResultValue > 1.0f)
{
ResultValue = 1.0f;
}
if (ResultValue < 0.0f)
{
ResultValue = 0.0f;
}
//插值计算HP值
bloodValue = Mathf.Lerp(bloodValue, ResultValue, 0.05f); GUI.HorizontalScrollbar(rctBloodBar, 0.0f, bloodValue, 0.0f, 1.0f);
}
}
UGUI代码 UGUI.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class UGUI : MonoBehaviour {
//外侧的血条边框
public RectTransform rectBloodPos;
//内侧的血条
public RectTransform blood;
//减少的血条,先要将内部血条设为stretch,然后这里的reduceBlood对应right属性
public int reduceBlood = 0;
void Update()
{
//为了保证物体移动的时候血条跟着动
Vector2 vec2 = Camera.main.WorldToScreenPoint(this.gameObject.transform.position);
rectBloodPos.anchoredPosition = new Vector2(vec2.x - Screen.width / 2 + 0, vec2.y - Screen.height / 2 + 60);
//这里需要用到下面的ExtendsionMethod,否则不能直接设置Right属性
blood.GetComponent<RectTransform>().Right(reduceBlood);
}
private void OnGUI()
{
if (GUI.Button(new Rect(20, 30, 40, 20), "加血"))
{
reduceBlood -= 10;
if(reduceBlood < 0)
{
reduceBlood = 0;
}
}
if (GUI.Button(new Rect(70, 30, 40, 20), "减血"))
{
reduceBlood += 10;
if(reduceBlood > 200)
{
reduceBlood = 200;
}
}
}
}
ExtendsionMethod.cs
using UnityEngine;
// 必须是静态类才可以添加扩展方法
public static class ExtensionMethod
{
// 扩展方法必须是静态的
// this 必须有,RectTransform表示我要扩展的类型,rTrans表示对象名
// 如果要带参数就在后面带上
public static void Left(this RectTransform rTrans, int value)
{
rTrans.offsetMin = new Vector2(value, rTrans.offsetMin.y);
}
public static void Right(this RectTransform rTrans, int value)
{
rTrans.offsetMax = new Vector2(-value, rTrans.offsetMax.y);
}
public static void Bottom(this RectTransform rTrans, int value)
{
rTrans.offsetMin = new Vector2(rTrans.offsetMin.x, value);
}
public static void Top(this RectTransform rTrans, int value)
{
rTrans.offsetMax = new Vector2(rTrans.offsetMax.x, -value);
}
}