在UIRoot下添加sprite(Skill)作为技能的图片 其上添加Skill脚本 (实现技能冷却的脚本 下文给出) 上面会有相关物体的引用
创建子对象sprite(Filled) 为技能遮罩 将UISprite的Type改为Filled 出现的FillAmount 改变其value (0-1)就可以实现技能冷却 这里的图片作为技能遮罩 可以改变图片颜色的alpha
创建子对象label(Time) 显示剩余时间 这里的 10s只是样式 当游戏运行时会赋值并显示出来
创建子对象label(KEy)技能发动所需按下的键
然后就是代码了
public class Skill : MonoBehaviour {
public UILabel timeLabel; // 时间label的引用
public UISprite filledSprite; // 遮罩sprite的引用
public float skillColdTime; // 技能冷却的时间
private bool isColding = false; // 是否冷却的标志位
private float timer = 0f; // 计时器
void Start() // 默认开始时让技能遮罩和时间都不显示
{
public UILabel timeLabel; // 时间label的引用
public UISprite filledSprite; // 遮罩sprite的引用
public float skillColdTime; // 技能冷却的时间
private bool isColding = false; // 是否冷却的标志位
private float timer = 0f; // 计时器
void Start() // 默认开始时让技能遮罩和时间都不显示
{
timeLabel.gameObject.SetActive (false);
filledSprite.gameObject.SetActive (false);
}
void Update() // 因为要实时监测,写在Update中
{
if (Input.GetKeyDown (KeyCode.A) && !isColding) // 当按下A键并且当前技能不在冷却时可以释放技能
{
print ("释放技能");
isColding = true; // 修改标志位
timeLabel.text = ((int)skillColdTime).ToString() + "s"; // 显示出剩余时间
timeLabel.gameObject.SetActive (true);
filledSprite.fillAmount = 1f; // 让遮罩显示出来
filledSprite.gameObject.SetActive (true);
timer = skillColdTime; // 让计时器的时间等于冷却时间
}
if (isColding) // 如果技能在冷却状态
{
timer -= Time.deltaTime; // 让计时器时间减少
timeLabel.text = ((int)timer).ToString() + "s"; // 显示剩余的冷却时间
filledSprite.fillAmount = timer / skillColdTime; // 按比例的减小fillamount
if(timer <= 0f) // 当计时器减少到0时,则技能冷却结束 让技能遮罩和时间都不显示 也更改其标志位
{
timeLabel.gameObject.SetActive (false);
filledSprite.gameObject.SetActive (false);
isColding = false;
}
}
}
}
filledSprite.gameObject.SetActive (false);
}
void Update() // 因为要实时监测,写在Update中
{
if (Input.GetKeyDown (KeyCode.A) && !isColding) // 当按下A键并且当前技能不在冷却时可以释放技能
{
print ("释放技能");
isColding = true; // 修改标志位
timeLabel.text = ((int)skillColdTime).ToString() + "s"; // 显示出剩余时间
timeLabel.gameObject.SetActive (true);
filledSprite.fillAmount = 1f; // 让遮罩显示出来
filledSprite.gameObject.SetActive (true);
timer = skillColdTime; // 让计时器的时间等于冷却时间
}
if (isColding) // 如果技能在冷却状态
{
timer -= Time.deltaTime; // 让计时器时间减少
timeLabel.text = ((int)timer).ToString() + "s"; // 显示剩余的冷却时间
filledSprite.fillAmount = timer / skillColdTime; // 按比例的减小fillamount
if(timer <= 0f) // 当计时器减少到0时,则技能冷却结束 让技能遮罩和时间都不显示 也更改其标志位
{
timeLabel.gameObject.SetActive (false);
filledSprite.gameObject.SetActive (false);
isColding = false;
}
}
}
}
然后就是运行 就可以实现技能冷却的效果了
有不当之处还请unity大神指教