任务目标
完成血条的预制设计
任务要求
- 分别使用 IMGUI 和 UGUI 实现
- 使用 UGUI,血条是游戏对象的一个子元素,任何时候需要面对主摄像机
- 分析两种实现的优缺点
- 给出预制的使用方法
实现过程
-
使用IMGUI实现
创建一个空对象,然后创建一个脚本,编辑脚本。using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Experimental.UIElements; public class MGUI : MonoBehaviour { float blood;//血量 //public Slider bl; //float curb; float p = 150f;//偏移位置 // Use this for initialization void Start () { } private void OnGUI() { if(GUI.Button(new Rect(p+100,100,100,100),"加血"))//创建加血按钮 { if (blood < 1) { blood += 0.1f; } } if(GUI.Button(new Rect(p+500, 100, 100, 100), "减血"))//创建扣血按钮 { if (blood > 0.1f) { blood -= 0.1f; } } GUI.HorizontalScrollbar(new Rect(p+300,300,200,50), 0f, blood, 0f, 1f);//滚动条表示血量 //bl.value = blood; } }
运行效果如下:
-
使用UGUI实现
首先添加一个对象作为血条的作用对象,使用的是unity自带的character,导入资源方法如下:
然后找到
将其拖入视图中,在此对象下添加UI->Canvas,然后在canvas里添加一个slider作为血条。
设置canvas中的render mode为world space
设置fill area中的fill使得血条为红色
设置slider的max value为1
这里的max value就是最大血量,min value就是最低血量。然后就需要调整血条的位置,使其显示在人物的头顶上方。
为了让血条一直正对屏幕(即摄像头),需要给血条加一个脚本,使其一直看相摄像头。using System.Collections; using System.Collections.Generic; using UnityEngine; public class lookcamera : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { this.transform.LookAt(Camera.main.transform.position); } }
最后运行结果如下:
对于这两种实现的方法制作成预制很简单,直接将对象拖入asset文件夹中即可保存为预制。
对于IMGUI的实现方法是完全使用代码来进行布置,所以对于重复的或者比较复杂的界面的设计时更加的方便与快捷。但是对于设计的要求比较高,使用代码来设置也比较难进行调试,不能很快的直观的看到效果。
对于UGUI来说在设计时非常的直观,能够直接看到设计的效果,而且不使用代码,直接对组件进行设置也更加的容易与直观。