游戏开发之U3D实现技能图标冷却的效果
游戏开发之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);
}
}
}
}
运行游戏,就可以看到效果了。