游戏开发之U3D实现技能图标冷却的效果

来源:互联网 发布:php 扩展 不成功 编辑:程序博客网 时间:2024/05/16 23:41

游戏开发之U3D实现技能图标冷却的效果

                                                                   --本次使用的NGUI插件。  

    制作思路NGUI插件里面有个UISprite组件,在它上面有个属性叫Type,改变相应的Type类型有不同的作用,本次使用的类型为Filled

如下图:

   计

 

     将属性选为Filled类型之后,我们可以看到它下面浮出一个属性Fill Dir填充方向选择这个为Radial 360,改变Fill Amount的数值,就可以实现技能冷却的效果了,如果还想看到技能冷却倒计时,还得加个Lable,用来显示时间。

    把步骤说一下:

    首先如下图搭建好UI


       计

 

    然后给Skill游戏物体添加一个脚本,脚本我已经写好了,类名SkillCD,如下:

using System;

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//此脚本挂在游戏对象上面

public class SkillCD :MonoBehaviour {

    //定义技能按钮

    private UIButton skillBtn;

    //定义技能遮罩

    private UISprite skillMask;

    //定义显示技能冷却时间的文本

    private UILabel skillCdLable;

    //定义标识符判断是否是冷却状态

    public bool isCd=false;

    //定义技能冷却时间

    public float skillCdTime = 6f;

    //定义计时器

    public float timeCount = 0;

    private void Start()

    {

        //初始化的时候在游戏对象上面获取相应的组件

        skillBtn =this.transform.Find("skillBtn").GetComponent<UIButton>();

        skillMask =this.transform.Find("skillMask").GetComponent<UISprite>();

        skillCdLable =this.transform.Find("skillCdLable").GetComponent<UILabel>();

        //给技能按钮绑定回调方法

        skillBtn.onClick.Add(new EventDelegate(OnSkillBtnClick));

        //默认状态下skillMask的类型是Filled,也可以在组件面板直接调整

        skillMask.type =UIBasicSprite.Type.Filled;

        //默认让这个遮罩层游戏物体不显示

        skillMask.gameObject.SetActive(false);

        //默认让显示技能Cd的文本不显示,只有当点击之后才显示

        skillCdLable.gameObject.SetActive(false);

    }

 

    private void OnSkillBtnClick()

    {

        //点击完技能按钮之后isCd设为true

        isCd =true;

    }

 

    private void Update()

    {

        //如果是Cd状态

        if(isCd)

        {

            //遮罩层游戏物体显示

            skillMask.gameObject.SetActive(true);

            //显示技能Cd的文本显示出来

            skillCdLable.gameObject.SetActive(true);

            //计时器开始计时

            timeCount +=Time.deltaTime;

            //还有多长时间回复冷却

            float skillTimeNow = skillCdTime - timeCount;

            //显示技能Cd的文本实时显示冷却时间

            skillCdLable.text = skillTimeNow.ToString("f1");

            //实时改变图片精灵的进度条的值,控制360度顺时针变化

            skillMask.fillAmount = skillTimeNow / skillCdTime;

            //如果到了冷却时间

            if(skillMask.fillAmount==0)

            {

                //冷却标识符设为false

                isCd =false;

                //计时器归0

                timeCount = 0;

                //遮罩层游戏物体设为不显示

                skillMask.gameObject.SetActive(false);

                //显示技能Cd的文本设为不显示

                skillCdLable.gameObject.SetActive(false);

            }

        }

    }

}

    运行游戏,就可以看到效果了。

计

   

阅读全文
0 0
原创粉丝点击