我正在尝试通过按键选择一种能力并通过左键单击来施放它

问题描述 投票:0回答:0

我试图让玩家通过按不同的键来选择一种能力,然后通过左键单击来施放它。在施放下一个技能之前,所有技能都有共同的冷却时间。我正在捕获选择哪种能力对每个能力都有不同的影响。

我的代码在添加左键单击的逻辑之前有效,所以如果我按下一个键来施放该能力并开始冷却,但我无法弄清楚为什么左键单击以施放所选的能力没有工作。

这是我所拥有的:

[SerializeField] private float cooldownTimer;
private float cooldown = 2f;
private int abilityChosen = 0;

void Start()
{

}

void Update()
{
    //lower cooldown every second
    cooldown -= Time.deltaTime;

    //different actions on different key presses
    if (Input.GetKeyDown(KeyCode.Q))
    {
        abilityChosen = 1;
        Debug.Log("Q");
        CastAbility();
    }
    else if (Input.GetKeyDown(KeyCode.E))
    {
        abilityChosen = 2;
        Debug.Log("E");
        CastAbility();
    }
    else if (Input.GetKeyDown(KeyCode.LeftShift))
    {
        abilityChosen = 3;
        Debug.Log("Left Shift");
        CastAbility();
    }
    else if (Input.GetKeyDown(KeyCode.LeftAlt))
    {
        abilityChosen = 4;
        Debug.Log("Left Alt");
        CastAbility();
    }
    else if (Input.GetKeyDown(KeyCode.Mouse1))
    {
        abilityChosen = 5;
        Debug.Log("Right Click");
        CastAbility();
    }
}

private void CastAbility()
{
    //let you cast an ability only if the cooldown is equal or lower than 0, and if you left click
    if (cooldown > 0)
    {
        Debug.Log("Ability on cooldown");
    } 
    else if (cooldown <= 0)
    {
            Debug.Log("Ability " + abilityChosen + " Cast");
            cooldown = cooldownTimer;

    }
    
}

在底部,在 CastAbility() 方法上,我尝试了这两种方法,仅在单击鼠标左键时才进行投射: 选项 1:

private void CastAbility()
{
    //let you cast an ability only if the cooldown is equal or lower than 0, and if you left click
    if (cooldown > 0)
    {
        Debug.Log("Ability on cooldown");
    } 
    else if (cooldown <= 0 && Input.GetKeyDown(KeyCode.Mouse0))
    {
            Debug.Log("Ability " + abilityChosen + " Cast");
            cooldown = cooldownTimer;
    }
    
}

选项2:

private void CastAbility()
{
    //let you cast an ability only if the cooldown is equal or lower than 0, and if you left click
    if (cooldown > 0)
    {
        Debug.Log("Ability on cooldown");
    } 
    else if (cooldown <= 0)
    {
        if (Input.GetKeyDown(KeyCode.Mouse0))
        {
            Debug.Log("Ability " + abilityChosen + " Cast");
            cooldown = cooldownTimer;
        }
    } 
}

正如我所说,它在单击时添加施法之前工作正常,因此如果未处于冷却状态,则在按下键时会立即施法。但是我不能用这个逻辑选择然后投射,有什么想法吗?

c# unity3d
© www.soinside.com 2019 - 2024. All rights reserved.