在Unity中实现一个技能冷却效果

208 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,[点击查看活动详情]

前言

在之前的文章中,写了很多关于光照模型的东西,偏理论的居多,本篇是一个轻松的话题,使用unity引擎来制作一个王者中的技能冷却效果,为了照顾到零基础的同学,文章中的操作步骤很详尽,每一步都有截图,代码部分也加了注释,我们开始吧!

搭建场景:

  • 1、在Hierarchy面板新建RawImage,将其Anchor设置为平铺整个屏幕。

image.png

  • 2、点击RawImage,在Inspector面板,将Preview预览图拖拽到Texture槽中。

image.png

  • 3、适当降低RawImage的透明度,方便查看效果。

image.png

  • 4、在Canvas下新建Image,命名为Skill1。

image.png

  • 5、将技能1的UI资源文件拖拽到SourceImage槽内。

image.png

  • 6、点击Set Native Sizi使图片保持原大小显示。

image.png

  • 7、在Skill1下再新建一个Image命名为Mask,作为遮罩,资源文件与Skill1保持一致。

image.png

  • 8、点击Mask,在Inspector中修改器颜色值为黑色半透明。

image.png

  • 9、修改Mask的ImageType为Filled,FillOrigin为Top,取消勾选ClockWise。

image.png

  • 10、在Mask下新建Text组件,设置Anchors为拉伸整个Mask。

image.png

  • 11、设置Text颜色为白色,删除其默认内容。

image.png

  • 12、选中Skill1在Inspector面板中点击Add Component为其添加Button组件。

image.png

  • 13、根据上述步骤,创建其他两个技能(采用复制替换美术资源即可)。

image.png

  • 14、将三个技能参考效果图放置到合适的位置。

image.png

编码环节。

  • 1、新建脚本ReleaseSkill.cs,挂载在三个技能上(可以同时选中三个,再进行拖拽)。

image.png

  • 2、打开脚本编辑器,添加如下代码。
using System; 
using System.Collections;
using System.Collections.Generic;
using UnityEngine; 
using UnityEngine.UI; 
public class ReleaseSkill : MonoBehaviour 
{ 
    private Button mBtnSkill; //技能释放按钮 
    private Image mSkillMask; //未冷却完时的遮罩 
    private Text mTxtSkillColdTime; //冷却时间文本 
    public float mColdTime = 5f; //技能冷却需要的时间,设置为public方便在Inspector面板中设置值     private float mCurrentTime; //当前剩余的时间
    private float mSpeed = 0.1f;//Mask旋转的速度 
    private bool mStartTimeCount;//是否开始倒计时 
    // Use this for initialization 
    void Start() 
    {
        //组件初始化,获取组件引用 
        mBtnSkill = GetComponent<Button>(); 
        mSkillMask = transform.Find("Mask").GetComponent<Image>(); 
        mTxtSkillColdTime = transform.Find("Mask/Text").GetComponent<Text>(); 
        //初始化值 
        mTxtSkillColdTime.text = ""; 
        mCurrentTime = 0f; 
        mSkillMask.fillAmount = 0; 
        //为技能释放按钮添加事件 
        mBtnSkill.onClick.AddListener(SkillRelease); 
     } 
     private void SkillRelease() 
     { 
         //刚点击完遮罩需要完全显示出来 
         mSkillMask.fillAmount = 1; 
         mStartTimeCount = true; 
     } 
     private void Update() 
     { 
         if (mStartTimeCount) 
         { 
             mCurrentTime += Time.deltaTime; 
             mSkillMask.fillAmount = (mColdTime - mCurrentTime) / mColdTime;   
             mTxtSkillColdTime.text = Convert.ToInt32(mColdTime - mCurrentTime).ToString(); 
             if (mCurrentTime >= mColdTime) 
             { 
                 mSkillMask.fillAmount = 0f; 
                 mCurrentTime = 0; 
                 mTxtSkillColdTime.text = ""; 
                 mStartTimeCount = false; 
              } 
          } 
     } 
}
  • 3、等待编译完成,分别选中Skill1,在Inspector面板中设置其冷却时间为5,Skill2为10,Skill3为15。

image.png

  • 4、点击运行查看效果。

image.png

最后。

本篇介绍了如何在Unity中制作一个技能冷却的效果,在进行UI布局时要考虑到分辨率的问题,利用好UI的Anchor很重要,切记。