原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/youxikaifa/2019/0924/657.html
这次手机App外包功课五选一,我选了血条这个来做(感受对照着实简单)。
先来看下功效,这个是IMGUI做的,玄色是由于没找到甚么办法设置色彩。
这里写图片描述
这个是用UGUI,感受对照悦目点。
这里写图片描述
这次用的这片面物资源和上次巡逻兵的同样,是在unity的市肆找的,资源如下
人物控制挪动的代码与上次比拟稍有窜改。
IMGUI实现血条
先来讲下IMGUI,这个其实即是用OnGUI函数来实现的,通过GUI的box,label,HorizontalScrollbar等等来实现菜单甚么的ui,这里做的血条就用到了HorizontalScrollbar。但这个东西实现血条感受我做的还不太好,比方说人物走远了,血条大小照旧不变,而且感受上会越来越高等等,这些都是挺繁难的工作,要通过录像机和人物的距离来举行调解,光阴有限,这里只是大略地实现血条。
如下即是App开发培训IMGUI实现血条的代码,写好后干脆挂到人物上头就好了,凭据人物高矮和分辨率来调一下barUpLength。
public class IMGUI : MonoBehaviour {
private Rect bloodBar; private float barUpLength = 70f; void Start()
private Rect bloodBar; private float barUpLength = 70f; void Start()
{
bloodBar = new Rect (0, 0, 60, 20);
} void OnGUI()
{
Vector2 player2DPosition = Camera.main.WorldToScreenPoint (transform.position);
player2DPosition.y = Screen.height - player2DPosition.y - barUpLength;
bloodBar.center = player2DPosition + new Vector2(0 , 0); if ( player2DPosition.x > Screen.width || player2DPosition.y > Screen.height
|| player2DPosition.x < 0 || player2DPosition.y < 0) {
} else {
GUI.HorizontalScrollbar(bloodBar, 0.0f, 1.0f, 0.0f, 1.0f);
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
UGUI实现血条
而后即是UGUI,首先给人物增加一个Canvas。
这里写图片描述
canvas的renderMode改成OverLay那个。
这里写图片描述
而后Canvas内部加一个slider。
这里写图片描述
slider下有几个子元素,把那个Handle Slide Area的active的√给点掉,这样slider就没有那个滑块了。
这里写图片描述
而后设置slider下的Fill Area中的fill的色彩,设为血色,这样slider看上去即是血色的血条了。
这里写图片描述
再把目前血量改一改。
这里写图片描述
还要改的即是血条slider的大小,在scale那边改改就好了,就不贴出来了。
接下来就UGUI的代码,这片面代码和IMGUI很像,都是将人物的坐标转换到录像机的坐标,而后把血条放到人物在录像机坐标的上方,但是UGUI中,Slider是着实的一个GameObject,挂在了人物上,是以感受对照着实。
public class UGUI : MonoBehaviour { private float barUpLength = 3f; public Slider healthSlider ; // Use this for initialization
void Start () {
} // Update is called once per frame
void Update () {
Vector3 worldPos = new Vector3(transform.position.x, transform.position.y + barUpLength , transform.position.z);
Vector3 screenPos = Camera.main.WorldToScreenPoint(worldPos);
healthSlider.transform.position = new Vector3(screenPos.x, screenPos.y, screenPos.z);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
总结
总的来说,常州网站开发培训IMGUI是个挺难弄的东西,由于它曾经挺过期了,UGUI的话就对照好,是着实的一个GameObject,不运行也能够看到,利便调试。这次功课中我用的这两种方式都没有实现血条的近大远小,由于感受也有点繁难,感受应该是通过录像机到人的距离来调解血条大小另有相对的高低,但是推导响应的公式感受对照头疼。
增补
事实上在UGUI中,把canvas的rendermode设置成worldspace,而后再用代码使得slider一直面朝录像机,便实现近大远小的功效,但是先生说能用overlay就用overlay,机能更好(有种被坑的感受),那种环境应该是静态的血条最好,例如少许游戏会在下方表现目前血量那种,这里这种动静的血条就不太好使,但是等我想起来这件事的时候曾经很晚了,以是前方的功课也就那样了。
上篇:上一篇:Unity5.3+ 在UGUI 上应用 粒子特效
下篇:下一篇:Unity的WWW类的用法整顿