Unity3d C#实现类似于王者荣耀技能读条和CD冷却的功能(含源码)

Posted 十幺卜入

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity3d C#实现类似于王者荣耀技能读条和CD冷却的功能(含源码)相关的知识,希望对你有一定的参考价值。

效果

效果如图,主要是释放技能后,有一定的技能的持续时间(也可以设置为0),然后技能释放完成后,技能进入了冷却时间的倒计时,技能冷却完成后就可以再次释放。

实现

UI搭建

UI的搭建较为简单就是几张图片(Image)配合文本(Text),文本主要用于技能冷却文字的提示和冷却CD倒计时的显示,而图片就包含了技能的图标、技能释放的外环(用于显示释放倒计时)、技能冷却的倒计时图片等,效果如图:

不过技能释放的外环和技能冷却倒计时图片需要将他们的Image Type设置为Filled:

编写代码

技能的配置项我们将他们提取为公用的,而且可以配置的操作:

   [Header("技能释放持续时间")]
    public float SkillDura;

    [Header("技能CD")]
    public float SkillCD;

    [Header("UI图片&文字")]
    public Text CountDownText;
public Image DoingImg, CoverImg;

这样我们就能在单个技能中配置多个技能各自的相关属性了。生产的配置面板如图:

技能的释放中的更新操作主要是根据释放的时间来更新释放图片的进度(fillAmount),并在释放完成后设置还原释放状态。

    void DoSkillUpdate() 
        if (Time.time - SkillTime <= SkillDura)
        
            DoingImg.fillAmount = (SkillDura - (Time.time - SkillTime)) / SkillDura;
            //CountDownText.text = (SkillDura - (Time.time - SkillTime)).ToString("F1");
            CountDownText.text = "";
        
        else
        
            IsDoing = false;
            CoverImg.fillAmount = 1;
            DoingImg.fillAmount = 0;
            LastTime = Time.time;
        

技能冷却CD读秒的过程,主要的操作是更新技能冷却图片的进度(fillAmount)和技能冷却的倒计时,并在技能冷却后重新设置技能的状态。

    void SkillNotReadyUpdate() 
        if (Time.time - LastTime <= SkillCD)
        
            CountDownText.text = "冷却中\\n"+(SkillCD - (Time.time - LastTime)).ToString("F1");

            CoverImg.fillAmount = (SkillCD - (Time.time - LastTime)) / SkillCD;
        
        else
        
            CountDownText.text = "";
            IsReady = true;
            CoverImg.fillAmount = 0;
        
    

技能的释放接口,我们需要进行一定的状态判断,正在释放中或者冷却中是无法释放的,释放接口如下:

public void DoSkill() 
        if (!IsReady || IsDoing)
            return;
        CoverImg.fillAmount = 0;
        LastTime = Time.time;
        SkillTime = Time.time;
        IsReady = false;
        IsDoing = true;
 

并将该函数绑定在技能的图标的按钮点击函数上,这样点击技能就可以实施技能。

这样技能的编码全部完成。

其它

有很多时候技能是没有持续时间(即为0),这时候只需要将SkillDura设置为0

技能便可以秒释放,且开始冷却技能。

这里我多克隆几个技能图标,并设置不同的参数,通过快捷键同步实施效果如下:

源码工程

https://download.csdn.net/download/qq_33789001/87349847
(打不开说明暂时未审核通过)

王者荣耀:安琪拉机制优化,1技能缓存保留,成新增T1中路

在王者荣耀中,中路的环境自从S20更新以后,就在不断的从多种英雄池中轮换,由一开始"日暮之流"大火热度提升的扁鹊貂蝉,到后来倾向于炮台类法师的干将小乔,一直到现在通过加强回归线权的火舞诸葛,中路的英雄主流转变向来都是跟着版本变动的,而安琪拉作为大环境下的法王同样如此,有1机制改动后,成为了版本的新增T1中路!

                                                                                                         

首先这次安琪拉的改动,简单的概括就是"缓存机制优化",假如不太了解法师位的玩家可能会疑惑,安琪拉和技能缓存的关联在哪里,其实早在S20版本更新之初,也就是7月下旬前后,就进行过技能缓存的改版,当时调整的内容为技能僵直0.5秒以上的技能,在衔接其他技能的时候,会在长僵直技能结束后直接释放衔接连招。

王者荣耀:安琪拉机制优化,1技能缓存保留,成新增T1中路

这个机制乍一看是提供给玩家反应空间,让高玩在被控制后,可以第一时间逃脱反身操作,但实际上非常影响某些特定英雄,例如上官婉儿/露娜,就会在踩笔墨/刷大的时候,因为敌方的一个控制而终止自己上一个轮盘移动的方向,等控制结束后被缓存的方向再次触发,但是路径上已经没有笔墨/敌人,从而白白的断大直接丧失战斗力,因此这个机制早早被删除。

王者荣耀:安琪拉机制优化,1技能缓存保留,成新增T1中路

                                                                                                         

然而对于安琪拉这个英雄,技能缓存机制反而是"优势",安琪拉213的标准秒人连招,其中2技能和1技能的技能前摇很久,就会触发该缓存机制,从而打出眩晕后无缝衔接技能,在控制时间内打出爆炸输出,这也是她在面对坦边版本仍然保持高热度的主要原因,但在该机制在S20更新以后被删除,现版本除非手速够快,否则很容易出现21后卡主3,伤害打不满。

王者荣耀:安琪拉机制优化,1技能缓存保留,成新增T1中路

王者荣耀:安琪拉机制优化,1技能缓存保留,成新增T1中路

好在针对这点,英雄也进行了相应优化,在更新过后的安琪拉,可以像S20缓存机制改动前一样,无缝衔接213连招,在2技能的眩晕时间内瞬间打满被动,所以说在使用2衔接1以后,1技能所带来的技能缓存效果保留,让安琪拉可以预见的在后续强度会直接提升,当前版本里的"断触/误按"现象会有所缓解,英雄强度也会因此小幅度提升。

但有意思的一点在于,即便是没有此前优势的安琪拉,在更新后依然是版本中的T1级法师,看得出大部分玩家对英雄都是持认可态度的,毕竟英雄清线速度奇快,唯一的弱点就是处理灵活英雄很吃预判,但即便如此也有"天花板"级的安琪拉玩家打上过巅峰赛第一,看得出英雄的上限绝对足够,并且打法其实和干将类似,不知道是不是你的本命?

                                                                                                         

个人总结:

其实这种机制的改动,对于一些英雄而言算是特殊的加持,例如版本中的韩信,在3技能持续时间内可以有很长一段时间来选择2技能的施法位置,因此总的来说这类机制有利有弊,或许在将来可以设置新的选项,供玩家自行选择开启,不知道你的本命会因此受到影响吗?

以上是关于Unity3d C#实现类似于王者荣耀技能读条和CD冷却的功能(含源码)的主要内容,如果未能解决你的问题,请参考以下文章

王者荣耀是怎样炼成的《王者荣耀》用什么开发,游戏入门,unity3D介绍

王者荣耀中皮肤和英雄技能java实现

王者荣耀中皮肤和英雄技能java实现

王者荣耀是怎样炼成的

王者荣耀:安琪拉机制优化,1技能缓存保留,成新增T1中路

《王者荣耀》用的是啥游戏引擎?