You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vampire Survivor克隆项目:武器独立冷却射击实现求助

解决《吸血鬼幸存者》克隆项目中武器独立冷却射击的问题

问题根源

你的代码存在两个核心问题导致所有武器共用同一冷却:

  1. 仅持有单个Weapon实例,所有WeaponData都调用同一个实例的Shoot(),无法区分不同武器的专属逻辑
  2. 单个Shoot()协程按顺序遍历武器数据,等待冷却后射击,本质是串行执行,而非每个武器独立计时

修复方案

我们需要让每个武器拥有独立的实例和独立的计时协程,实现并行的冷却射击逻辑。

1. 调整Weapon类结构

给Weapon类添加专属数据绑定,让每个武器实例持有自己的WeaponData:

public class Weapon : MonoBehaviour
{
    public WeaponData data; // 绑定当前武器的专属参数(冷却、射程等)

    public void Shoot()
    {
        // 保留你的实例化逻辑,可结合data中的参数调整
        // 示例:Instantiate(data.bulletPrefab, transform.position, Quaternion.identity);
    }
}

2. 修改CharacterAttack逻辑

将单个武器实例改为武器实例列表,为每个武器启动独立的射击协程:

public class CharacterAttack : MonoBehaviour
{
    #region Fields
    public List<Weapon> weapons; // 存放所有武器实例
    #endregion

    private void Awake()
    {
        // 为每个武器启动独立的冷却射击协程
        foreach (var weapon in weapons)
        {
            StartCoroutine(RunWeaponShoot(weapon));
        }
    }

    // 单个武器的独立射击协程
    private IEnumerator RunWeaponShoot(Weapon weapon)
    {
        while (true)
        {
            // 等待当前武器的专属冷却时间
            yield return new WaitForSeconds(weapon.data.cooldown);
            // 调用当前武器的射击方法
            weapon.Shoot();
        }
    }
}

关键说明

  • 独立协程:每个武器的协程独立运行,互不干扰,实现了各自按专属冷却时间射击的需求
  • 数据绑定:每个Weapon实例绑定自己的WeaponData,后续扩展射程、伤害等专属参数时,直接从weapon.data读取即可
  • 动态扩展:如果游戏中需要动态添加武器(比如拾取新武器),只需在添加新Weapon实例时调用StartCoroutine(RunWeaponShoot(newWeapon))即可

内容的提问来源于stack exchange,提问作者TryingToImprove

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 06:20:11