本人前一阵子在与社团好友一同开发一个游戏项目,本人负责技能部分,其中有些技能是dot和hot效果的,本来的思路是想用Time类制作计时器来解决,后来在实践中发现效果很不理想。于是转而利用携程来做出相应的效果.
本人对于携程的理解并不够深,关于携程的原理可以从其他文章了解
具体代码如下
/// <summary>
/// 利用携程制作定时器,来实现Dot,Hot技能的使用,溃烂,苦痛深渊和阳光滋润共同调用这个,区别只在于形参传入的值
/// </summary>
/// <param name="timeOff">血量改变的时间间隔</param>
/// <param name="count">改变的次数</param>
/// <param name="change">一次改变多少值</param>
/// <param name="who">这个来判断是BOSS扣血还是主角扣血,BOSS是1,主角是2</param>
/// <returns></returns>
IEnumerator TakeDamage(float timeOff, int count, float change, int who)
{
for (int i = 0; i < count; i++)
{
yield return new WaitForSeconds(timeOff);
switch (who)
{
case 1:
FSM.instance.ChangeBossHp(change);
// BossControl.instance.ChangeBossHp(change);
break;
case 2:
HeroKnight.instance.ChangeHeroHp(change);
break;
}
}
}
如代码所示,对于需要传入的几个参数都有了对应的解释
技能要做出的效果是,对目标进行每隔固定的时间,就进行固定的伤害,然后伤害会跳固定的次数。
至于需要传入的参数,正好对应这几个功能。
timeOff 是这个携程唤醒的时间间隔。
couut 在for循环内,是控制这个携程运行次数的变量。
change 是传入对应伤害计算方法的参数,用于调整技能的伤害或者奶量。
至于 who 这个参数无关紧要,我在写技能方法时,让敌人主角工用这套方法,who的作于仅仅是用于区分这个技能作用的对象。
如此一来,在需要调用技能的时候,使用这个携程即可,以一个对BOSS造成伤害的dot技能为例子:
StartCoroutine((IEnumerator)TakeDamage(1, 5, 2f, 1));//每隔一秒伤害一次,共伤害5次,一次造成5点伤害,作用于BOSSs
在对应技能的方法里面写上这样一句,根据对应的参数就可以知道,该技能效果是:每隔一秒伤害一次,共伤害5次,一次造成5点伤害,作用于BOSS
可以看出,技能的数值能随意修改,非常方便。