gpt4 book ai didi

c# - 在 Unity 中创建能力对象

转载 作者:太空狗 更新时间:2023-10-29 23:12:36 24 4
gpt4 key购买 nike

选择角色时我目前有一个基类

abstract class CharacterClass
{
public abstract void AbilityOne();

public abstract void AbilityTwo();
}

我的角色派生自这个类

class Warrior : CharacterClass
{
public override void AbilityOne()
{
// implement ability one here
}

public override void AbilityTwo()
{
// implement ability two here
}
}

最后我使用这段代码来选择战士

CharacterClass selectedClass = new Warrior(); // start the game as a Warrior

所以这种方式工作得很好。但是当涉及到冷却时间等时。我想保持干净的代码,所以我考虑创建一个 Ability 类。

我的抽象父类

abstract class CharacterClass
{
public Ability AbilityOne { get; set; }

public Ability AbilityTwo { get; set; }
}

勇士级

class Warrior : CharacterClass
{
public Warrior()
{
// Set the new Abilities
AbilityOne = new Ability(3, Smash()); // pass in the method as a parameter ??
AbilityTwo = new Ability(7, Shieldblock());
}

private void Smash()
{
// Ability 1
}

private void ShieldBlock()
{
// Ability 2
}
}

还有我的技能等级

class Ability
{
public Ability(int cooldown, [the ability method here])
{
CoolDown = cooldown;
TheAbility = ? the ability parameter ?
}

public int CoolDown { get; set; }

public void TheAbility(){}
}

所以战士会传入他的两个技能,创建两个能力对象。在游戏中我可以写

CharacterClass selectedClass = new Warrior();
selectedClass.AbilityOne();

这将导致 3 秒冷却时间的粉碎。这有可能实现.. 以某种方式 .. 吗?

最佳答案

因为 AbilityOne 返回一个 Ability 对象,所以在 Ability 类中创建基础设施是有意义的有,例如在某些 Update() 方法中运行冷却计时器的时钟,使用能力等

所以调用你的能力的代码看起来像这样:

selectedClass.AbilityOne.Trigger();

将能力方法存储为能力类中的 System.Action 也是有意义的。

class Ability
{
public Ability(int cooldown, System.Action _abilityMethod)
{
CoolDown = cooldown;
abilityMethod = _abilityMethod;
}

public int CoolDown { get; set; }

public void Trigger()
{
if( abilityMethod != null )
{
abilityMethod();
}
}

private System.Action abilityMethod;
}

关于c# - 在 Unity 中创建能力对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46443054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com