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;
}
}
}
1)我有一个讨厌的怀疑,实际的问题是在Time.deltaTime,但你没有显示代码,所以我不能确认这一点。
2)因为你在这里有基于时间的代码,你不能期望它在你逐步执行代码时表现相同。因此,它通常有助于重新使用一些旧技术,即print语句。当然,这些年来,事情发生了很大的变化,它变成了书面形式,但这些想法仍然有效。选择屏幕中对测试内容不重要的部分,并将与测试内容相关的变量写出来。我想你会发现玩家2的冷却速度非常慢。
我认为你需要对物体有更好的理解。你似乎只是把它们当作容器。我也不喜欢player1和player2——你应该有一个玩家列表。还记得WOPR在战争游戏中是如何被打败的吗?——这在平衡事物时非常有用。