C# 统一RPG,正确施法,不使用法力,但伤害仍然持续
我创造了一种既能使用法力又能对敌人造成伤害的技能。我成功地做到了,如果我的玩家的法力<技能成本,那么它将不会使用任何法力。问题是,即使它不会使用法力,技能仍然会被使用,伤害也会被消除 单位.csC# 统一RPG,正确施法,不使用法力,但伤害仍然持续,c#,unity3d,C#,Unity3d,我创造了一种既能使用法力又能对敌人造成伤害的技能。我成功地做到了,如果我的玩家的法力=成本){ //移除用于该法术的法力 currentMP-=成本; //玩家可以施法 返回true; } //给用户的消息,因为他的施法失败 Log(“施法失败”); //玩家无法施法 返回false; } 我们现在可以使用这些返回值从枚举中返回 IEnumerator Skill1Use() { 如果(!playerUnit.UseMana(10)){ //从枚举数中返回 屈服断裂; } ..... } 如
public void UseMana(int spellcost)
{
if (currentMP >= spellcost)
{
currentMP -= spellcost;
}
}
IEnumerator Skill1Use()
{
playerUnit.UseMana(10);
playerHUD.SetMP(playerUnit.currentMP);
bool isDead = enemyUnit.TakeDamage(Convert.ToInt32(playerUnit.damage * 1.2));
enemyHUD.SetHP(enemyUnit.currentHP);
dialogueText.text = "The attack is successful";
yield return new WaitForSeconds(2f);
if (isDead)
{
state = BattleState.WON;
EndBattle();
}
else
{
state = BattleState.ENEMYTURN;
StartCoroutine(EnemyTurn());
}
作战系统.cs
public void UseMana(int spellcost)
{
if (currentMP >= spellcost)
{
currentMP -= spellcost;
}
}
IEnumerator Skill1Use()
{
playerUnit.UseMana(10);
playerHUD.SetMP(playerUnit.currentMP);
bool isDead = enemyUnit.TakeDamage(Convert.ToInt32(playerUnit.damage * 1.2));
enemyHUD.SetHP(enemyUnit.currentHP);
dialogueText.text = "The attack is successful";
yield return new WaitForSeconds(2f);
if (isDead)
{
state = BattleState.WON;
EndBattle();
}
else
{
state = BattleState.ENEMYTURN;
StartCoroutine(EnemyTurn());
}
如果成功,您可以返回一个
bool
,作为检查:
public bool UseMana(int spellcost)
{
if (currentMP >= spellcost)
{
currentMP -= spellcost;
return true;
}
return false;
}
然后呢
IEnumerator Skill1Use()
{
// if the mana was not successful break here and do nothing
if(!playerUnit.UseMana(10))
{
dialogueText.text = "Not enough Mana for the attack! :(";
yield break;
}
...
问题是,即使它不会使用法力,技能仍然是
使用后,损坏会消失
目前你没有检查用户是否有足够的法力来施法。实现这一点的最简单方法是让UseMana函数返回bool,然后使用它退出Skill1Use枚举
如果您想在施法失败时显示消息,可以将其放入UseMana功能
更改了UseMana功能:
public bool UseMana(整数拼写成本)
{
如果(当前MP>=成本){
//移除用于该法术的法力
currentMP-=成本;
//玩家可以施法
返回true;
}
//给用户的消息,因为他的施法失败
Log(“施法失败”);
//玩家无法施法
返回false;
}
我们现在可以使用这些返回值从枚举中返回
IEnumerator Skill1Use()
{
如果(!playerUnit.UseMana(10)){
//从枚举数中返回
屈服断裂;
}
.....
}
如果您不想使用产生中断跳过整个枚举数代码>当玩家无法施法时,你可以切换if语句,并将所有依赖于施法的代码包含到if语句中
仅跳过枚举器代码的某些部分:
IEnumerator Skill1Use()
{
如果(playerUnit.UseMana(10)){
//玩家执行了咒语,所以我们现在可以开始计算了
.....
}
//玩家无法施法,因此我们可以跳过伤害计算,
//死亡检查和设置UI
否则{
.....
}
.....
}
产生返回空值代码>错误(请参阅)<代码>收益返回空代码>仅延迟一帧,但继续执行例程。。要退出IEnumerator
,您必须使用产量中断代码>谢谢,我不知道如何再次退出枚举。因此,是的,基本上现在我们说的是完全相同的;)谢谢大家!令人惊讶的是,这里的人们反应如此之快。它现在起作用了,如果没有足够的法力点击按钮,什么都不会做。现在,如果我想显示一条文字,说“没有足够的法力”,我应该把它放在代码中的什么地方。@mookalious我相应地编辑了我的答案,如果你真的想向用户显示它,而不只是在控制台上打印一条消息,你可能需要启用一个面板gui来模拟弹出窗口。