c# RPG -技能冷却问题

本文关键字:冷却 问题 RPG | 更新日期: 2023-09-27 18:13:15

我正在制作一款RPG,并开始制作技能冷却时间。我有一个由用户(player1)控制的播放器,以及一个由计算机(player2)控制的播放器,用于测试目的。技能的冷却时间对于用户控制的玩家来说是完美的,但是当涉及到AI时,计算机将不会执行该技能,除非计算机先执行(当技能默认关闭冷却时间时)。以下是我认为与问题相关的代码,但如果需要更多信息,我会更新帖子。

能力类:

using UnityEngine;
public class attackList : MonoBehaviour{
public int dmg;
public float coolDown;
public float _attackTimer;
public void Attack1(basePlayer user, basePlayer target, int D)
{
   coolDown = 2.5f;
    if (user._attackTimer == 0)
    {
        dmg = D;
        user._attackTimer = coolDown;
        target.curHealth -= dmg;
    }
}
public void cooldown(basePlayer user)
{
    if (user._attackTimer > 0) {
        user._attackTimer -= Time.deltaTime;
        if (user._attackTimer < 0) {
           user._attackTimer = 0;
        }
    }
  }
}

攻击逻辑类:

 public class attackLogic : MonoBehaviour {
private attackList _attackList = new attackList();
private playerList _playerList = new playerList();
public bool player1_turn = false;  //player1 is not allowed to go first by default
public bool player2_turn = false;  //player2 is not allowed to go first by default
void Start()
{
    int rnd = Random.Range (1,3); // random value between 1 and 2 generated, which will determine what player goes first
    if (rnd == 1)
    {
        player1_turn = true;
    }
    if (rnd == 2)
    {
        player2_turn = true;
    }
    //current health set to the maximum health at the beginning of each fight
    _playerList.player1.curHealth = _playerList.player1.maxHealth;
    _playerList.player2.curHealth = _playerList.player2.maxHealth;
}
void Update()
{
    Logic(); //run through the logic of the battle
}
public void Logic()
{
    if (player1_turn == true)
    {
        _attackList.cooldown(_playerList.player1);
        if (Input.GetKeyUp("1"))
        {
           _attackList.Attack1(_playerList.player1, _playerList.player2, 5);
            player1_turn = false;
            player2_turn = true;
        }
    }

    if (player2_turn == true)
    {
        _attackList.cooldown(_playerList.player2);
        _attackList.Attack1(_playerList.player2, _playerList.player1, 5);    
            player1_turn = true;
            player2_turn = false;
      }
  }
}

c# RPG -技能冷却问题

1)我有一个讨厌的怀疑,实际的问题是在Time.deltaTime,但你没有显示代码,所以我不能确认这一点。

2)因为你在这里有基于时间的代码,你不能期望它在你逐步执行代码时表现相同。因此,它通常有助于重新使用一些旧技术,即print语句。当然,这些年来,事情发生了很大的变化,它变成了书面形式,但这些想法仍然有效。选择屏幕中对测试内容不重要的部分,并将与测试内容相关的变量写出来。我想你会发现玩家2的冷却速度非常慢。

我认为你需要对物体有更好的理解。你似乎只是把它们当作容器。我也不喜欢player1和player2——你应该有一个玩家列表。还记得WOPR在战争游戏中是如何被打败的吗?——这在平衡事物时非常有用。