3D游戏第九次作业
1. 血条(Health Bar)的预制设计。具体要求如下
- 分别使用 IMGUI 和 UGUI 实现
- 使用 UGUI,血条是游戏对象的一个子元素,任何时候需要面对主摄像机
- 分析两种实现的优缺点
- 给出预制的使用方法
IMGUI:
效果展示:
实现:
制作一个红色cube作为血条,并用脚本控制血条的位置,添加两个button用来加减血量
以上脚本挂载在预制的cube上,并且把人物作为共有变量以确定血条的位置
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class healthBar : MonoBehaviour
{
float padding = 0;
public Transform t;
// Start is called before the first frame update
void Start(){ }
// Update is called once per frame
void Update()
{
this.transform.position = new Vector3(t.position.x-padding, t.position.y + 2, t.position.z);
}
private void OnGUI()
{
//加血
if (GUI.Button(new Rect(250, 50, 40, 20), "+"))
{
padding -= 0.05f;
transform.localScale = new Vector3(transform.localScale.x + 0.1f, transform.localScale.y, transform.localScale.z);
}
//扣血
if (GUI.Button(new Rect(250, 70, 40, 20), "-"))
{
if (transform.localScale.x > 0)
{
padding += 0.05f;
transform.localScale = new Vector3(transform.localScale.x - 0.1f, transform.localScale.y, transform.localScale.z);
}
}
}
}
UGUI:
效果展示:
实现:
创建一个人物对象,给它添加canvas画布子对象,并添加 Slider 作为血条主体。
将 Slider 中的 Handle Slider Area 、 Background 禁用,并且设置Fill的Image组件颜色为红色,调整Slider 组件的MaxValue 为 100、Value 为 75。
并给 Canvas 添加以下脚本 LookAtCamera.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LookAtCamera : MonoBehaviour {
void Update () {
this.transform.LookAt (Camera.main.transform.position);
}
}
使用时,只需要勾选Canvas或者healthBar
两种实现方法的比较
IMGUI
实现简单,比如绘制一个控件,只需要GUI.Lable()、GUI.Button()这样即可,不需要使用UI组件,很容易上手。IMGUI的存在符合游戏编程的传统,在修改模型,渲染模型这样的经典游戏循环编程模式中,在渲染阶段之后,绘制 UI 界面无可挑剔。避免了 UI 元素保持在屏幕最前端,又有最佳的执行效率,一切控制掌握在程序员手中,这对早期计算和存储资源贫乏的游戏设备来说,更是弥足珍贵。
UGUI
可视化,所见即所得(WYSIWYG)设计工具,设计师也能参与程序开发,支持多模式、多摄像机渲染,UI 元素与游戏场景融为一体的交互,UGUI的控件是以“游戏对象”的形式存在与游戏场景中,这样直观易于使用,直接可以在Scene视图中编辑大小、位置、旋转角度、缩放等等,不需要手动写任何代码