unity手游<少侠历险记>(3)NGUI:HUD使用

来源:互联网 发布:项目管理 软件 pdf 编辑:程序博客网 时间:2024/05/11 12:16

前言


本文由作者@zx一路飞奔出品,转载请注明出处

文章地址:http://blog.csdn.net/u014735301/article/details/43085145

作者微博:http://weibo.com/u/1847349851


NGUI HUD Text是一款不错的信息显示插件,

例如人物头顶的对话显示,受到伤害,治疗的数字显示等。

顾名思义,这款插件是基于NGUI开发的,也就是说它必须跟NGUI配套使用。

这里我使用这个插件来做一个攻击伤害的显示,同时也在怪物头顶做了血条。先看看效果!




感觉还是超酷的! 下面来看看插件是怎么使用的


血条制作


在项目中导入NGUI插件和HUD Text插件 创建一个NGUI 2D界面,

创建一个空对象,命名为HP-small,使用2个UISprite图片,HP-bg,HP-for,来作为血条的背景图片,和显示在前面的图片。

同时用到UISlider脚本。value值是用来控制HP-for图片的长度,从而造成扣血的效果



同时为了使血条能够显示在enemy的头顶,还需要添加UIFollowTarget脚本

在enemy上方创建一个空对象,将脚本中target选择那个对象。




这样在游戏中,血条就会跟随enemy的移动而移动了!!同时伤害显示也会在这个地方出现!!


伤害显示


还是在HP-small上挂上HUDText脚本 




True Type Font 选择字体,下面是字体大小,样式,

Effect 是信息显示的样式,我选择none。

Offset ,Alpha,Sacle 为显示信息的动画效果,可以默认,也可以自己调整

在enemy控制脚本中,使用它,

HUDText mText.Add(String text, Color color, float stayDuration)text是需要显示的文本,color是文本颜色,stayDuration是文本显示的时间

    //受到伤害    public void GetDamage(float hit, float multipleDamage)    {        Debug.Log("enemy受到了" + hit + "点伤害 * " + multipleDamage);        for (int i = 0; i < multipleDamage; i++)        {            text.Add("-" + hit + "", Color.yellow, 0.1f);            //根据血量的扣除,来调整value的值            slider.value -= 0.1f;        }        EnemyLockTarget(player);        ctrlAnimState = ControlAnimationState.TakeAtk;}

这样就可以造成刚开始图片中的效果了!!


实例化enemy和血条


在NGUI,创建空对象,命名为HUDRoot,挂上HUDRoot脚本。在实例化hudtext时,就会在该对象下面出现

using UnityEngine;using System.Collections;public class SpawnTest : MonoBehaviour {    //enemy 和 HUD 的prefab    public GameObject enemyPrefab,HUDPrefab;// Update is called once per framevoid Update () {        if (Input.GetMouseButtonDown(0))        {               //实例化enemy            GameObject enemy = Instantiate(enemyPrefab, new Vector3(transform.position.x, transform.position.y,                Random.Range(-5f,5f)), Quaternion.identity) as GameObject;            //在HUDRoot对象下,实例化血条和HUDText            GameObject HUD =  NGUITools.AddChild(HUDRoot.go,HUDPrefab);            //设置target对象为enemy的子物体showInfo            UIFollowTarget follow = HUD.GetComponent<UIFollowTarget>();            follow.target = GameSetting.GetTransform(enemy.transform,"showInfo");            //将hudtext脚本赋值给EnemyController使用            HUDText hud = HUD.GetComponent<HUDText>();            EnemyController enemyC = enemy.GetComponent<EnemyController>();            enemyC.text = hud;        }}}

    //查找某个物体下无限层级的子物体名称,并返回该子物体。    static public Transform GetTransform(Transform check, string name)    {        foreach (Transform t in check.GetComponentsInChildren<Transform>())        {            if (t.name == name) { return t; }               }        return null;    }









1 0
原创粉丝点击