【3D游戏】血条(Health Bar)的预制设计

本文对比了在Unity中使用IMGUI和UGUI实现血条(HealthBar)的预制设计。详细介绍了两种方法的具体实现步骤,分析了它们各自的优缺点,并提供了预制的使用方法。IMGUI实现简单但不利于布局,UGUI则可视化且易于使用。

血条(Health Bar)的预制设计。具体要求如下
1. 分别使用 IMGUI 和 UGUI 实现
2. 使用 UGUI,血条是游戏对象的一个子元素,任何时候需要面对主摄像机
3. 分析两种实现的优缺点
4. 给出预制的使用方法

IMGUI实现

将下面脚本挂载在游戏对象上即可。

public class IMGUI : MonoBehaviour {
    public float healthPanelOffset = 2f;
    private void OnGUI()
    {
        Vector3 worldPos = new Vector3(transform.position.x, transform.position.y, transform.position.z);
        Vector2 screenPos = Camera.main.WorldToScreenPoint(worldPos);
        Rect rect = new Rect(screenPos.x -50,screenPos.y,100,100);
        GUI.HorizontalScrollbar(rect, 0, 75, 0, 100);
    }
}

UGUI实现

在预期实现血条的游戏对象上添加Canvas画布子对象,在Canvas上添加Slider滑条作为血条子对象,将下面脚本挂载在游戏对象上。

public class UIScript : MonoBehaviour {
    public Canvas canvas;
    public GameObject healthPrefab;

    public float healthPanelOffset = 2f;
    public GameObject healthPanel;
    private Slider healthSlider;

    // Use this for initialization
    void Start () {
        healthPanel = Instantiate(healthPrefab) as GameObject;
        healthPanel.transform.SetParent(canvas.transform, false);
        healthSlider = healthPanel.GetComponentInChildren<Slider>();
        Vector3 worldPos = new Vector3(transform.position.x, transform.position.y + healthPanelOffset, transform.position.z);
        Vector3 screenPos = Camera.main.WorldToScreenPoint(worldPos);
        healthPanel.transform.position = new Vector3(screenPos.x, screenPos.y, screenPos.z);
    }
	
	// Update is called once per frame
	void Update () {
        Vector3 worldPos = new Vector3(transform.position.x, transform.position.y + healthPanelOffset, transform.position.z);
        Vector3 screenPos = Camera.main.WorldToScreenPoint(worldPos);
        healthPanel.transform.position = new Vector3(screenPos.x, screenPos.y, screenPos.z);
    }
}

两种实现的优缺点

IMGUI

优点是实现简单,比如绘制一个控件,只需要GUI.Lable()、GUI.Button()这样即可,不需要使用UI组件,很容易上手。缺点是不利于布局,在协调对象之间的位置关系的时候会很麻烦,这样维护起来也会很困难。调用OnGUI,每一帧都需要重算布局重新渲染,性能低下。

UGUI

优点是可视化,所见即所得。UGUI的控件是以“游戏对象”的形式存在与游戏场景中,这样直观易于使用,直接可以在Scene视图中编辑大小、位置、旋转角度、缩放等等,不需要手动写任何代码。据说效率比较高,“提供了一个经过优化的解决方案,使得开发者添加到游戏中的UI能够快速的被GPU执行(绘制)”直观的缺点是上手比较困难,学习成本比较高,提供强大功能的同时意味着需要花更多的时间了解这些功能的使用。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值