Unity 技能系统框架:简单易懂的代码示例
下面是一个简单的 Unity 技能系统框架的代码示例:
using UnityEngine;
public abstract class Skill : MonoBehaviour
{
public string skillName;
public float cooldown;
public float castTime;
protected bool isCasting;
protected bool isCooldown;
public abstract void Cast();
private void Update()
{
if (isCooldown)
{
// 更新冷却时间
cooldown -= Time.deltaTime;
if (cooldown <= 0)
{
cooldown = 0;
isCooldown = false;
}
}
}
protected virtual void StartCooldown()
{
if (!isCooldown)
{
isCooldown = true;
cooldown = GetCooldownTime();
}
}
protected virtual float GetCooldownTime()
{
return cooldown;
}
}
public class DamageSkill : Skill
{
public int damage;
public override void Cast()
{
if (!isCasting && !isCooldown)
{
isCasting = true;
// 播放施法动画、音效等
// 等待施法时间
Invoke("DealDamage", castTime);
}
}
private void DealDamage()
{
// 执行技能伤害逻辑
// 结束施法
isCasting = false;
StartCooldown();
}
}
public class HealingSkill : Skill
{
public int healAmount;
public override void Cast()
{
if (!isCasting && !isCooldown)
{
isCasting = true;
// 播放施法动画、音效等
// 等待施法时间
Invoke("Heal", castTime);
}
}
private void Heal()
{
// 执行技能治疗逻辑
// 结束施法
isCasting = false;
StartCooldown();
}
}
public class Player : MonoBehaviour
{
public Skill[] skills;
private void Update()
{
if (Input.GetKeyDown(KeyCode.Alpha1))
{
// 使用技能1
skills[0].Cast();
}
else if (Input.GetKeyDown(KeyCode.Alpha2))
{
// 使用技能2
skills[1].Cast();
}
// ...其他技能的按键检测
}
}
在上述代码中,我们定义了一个抽象的Skill类作为所有技能的基类。每个技能都有一个名称、冷却时间和施法时间。Skill类还包含了isCasting和isCooldown两个布尔值,用于控制技能的施法和冷却状态。
Skill类还定义了一个抽象的Cast()方法,用于在子类中实现具体的技能逻辑。在Cast()方法中,我们首先检查技能是否正在施法或者冷却中,如果不是就开始施法。在施法过程中,我们可以播放施法动画、音效等。然后使用Invoke()方法等待施法时间结束后执行具体的技能逻辑。最后,结束施法并开始冷却。
DamageSkill和HealingSkill继承自Skill类,分别代表了造成伤害的技能和治疗的技能。这两个子类分别重写了Cast()方法和添加了一些具体的技能逻辑。
Player类是一个示例角色类,它包含了一个技能数组skills,用于存储玩家拥有的技能。在Update()方法中,我们可以根据按键的输入来使用不同的技能。
以上是一个简单的 Unity 技能系统框架,你可以根据自己的需求进一步扩展和修改。
原文地址: https://www.cveoy.top/t/topic/o7jk 著作权归作者所有。请勿转载和采集!