下面是一个简单的 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类还包含了isCastingisCooldown两个布尔值,用于控制技能的施法和冷却状态。

Skill类还定义了一个抽象的Cast()方法,用于在子类中实现具体的技能逻辑。在Cast()方法中,我们首先检查技能是否正在施法或者冷却中,如果不是就开始施法。在施法过程中,我们可以播放施法动画、音效等。然后使用Invoke()方法等待施法时间结束后执行具体的技能逻辑。最后,结束施法并开始冷却。

DamageSkillHealingSkill继承自Skill类,分别代表了造成伤害的技能和治疗的技能。这两个子类分别重写了Cast()方法和添加了一些具体的技能逻辑。

Player类是一个示例角色类,它包含了一个技能数组skills,用于存储玩家拥有的技能。在Update()方法中,我们可以根据按键的输入来使用不同的技能。

以上是一个简单的 Unity 技能系统框架,你可以根据自己的需求进一步扩展和修改。


原文地址: https://www.cveoy.top/t/topic/o7jk 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录