文章目录
- 使用IMGUI实现血条设计
- 使用UGUI实现血条设计
- 两种实现的优缺点
- IMGUI的优点
- IMGUI的缺点
- UGUI的优点
- UGUI的缺点
- 预置的使用方法
使用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对象中