Unity C# 不接受某些输入

Unity C# Not taking in certain Input

我正在创建一个 FPS 游戏,我的玩家有能力,她的终极技能是 Valorant 中 Jett 的终极技能(她的武器切换为可以向敌人投掷的 5 把刀)我已经设法将武器切换为刀具但是当我按下鼠标 Left-Click 时什么也没有发生。我禁用了控制枪支的脚本,这样玩家就可以发射子弹、使用枪口闪光灯等,但无论它是启用还是禁用,刀具都不起作用。我添加了调试日志,但没有调用它们,我使用与扔刀相同的按钮开枪。我也在没有 'readyToThrow' 变量和 'totalThrows' 变量的情况下测试了它。

更新方法:

void Update()
    {
        if (Time.time >= QabilityTimer && Input.GetKeyDown(KeyCode.Q))
        {
            Dash();
            QabilityTimer = Time.time + Qcooldown;
        }

        if (Time.time >= EabilityTimer && Input.GetKeyDown(KeyCode.E))
        {
            SpeedBoost();
            EabilityTimer = Time.time + Ecooldown;
        }

        if (meterButton.currentProgress == meterButton.maxProgress)
        {
            ultReady = true;

           // Debug.Log("ult ready");

            if (Input.GetKeyDown(KeyCode.X))
            {

                //disable the gun script whilst ult is active.
                GameObject gun = GameObject.Find("Guns");
                gun.GetComponent<Guns>().enabled = false;

                weaponSelection.EunhaUltKnife();
                EunhaUltimate();
            }

        }
        if (ultActive)
        {
            ultTimer -= Time.deltaTime;
        }

        if (ultTimer <= 0)
        {
            ResetUltimate();
        }
    }

最终方法:

public void EunhaUltimate()
    {
        ultActive = true;

        if (Input.GetKeyDown(KeyCode.Mouse0) && readyToThrow && totalThrows > 0)
        {
            Debug.Log("working");
            readyToThrow = false;

            GameObject projectile = Instantiate(objectToThrow, attackPoint.position, cam.rotation);
            Rigidbody projectileRB = projectile.GetComponent<Rigidbody>();

            Vector3 forceToAdd = cam.transform.forward * throwForce + transform.up * throwUpwardForce;
            projectileRB.AddForce(forceToAdd, ForceMode.Impulse);

            totalThrows--;

            Invoke(nameof(ReserThrow), throwCooldown);
        }

    }

尝试使用 Input.GetKey(KeyCode.Mouse0) 或 Input.GetKeyUp(KeyCode.Mouse0) 而不是 Input.GetKeyDown(KeyCode.Mouse0).

看来只有按住 X 才能进入 EunhaUltimate():

    if (meterButton.currentProgress == meterButton.maxProgress)
    {
        ultReady = true;

       // Debug.Log("ult ready");

        if (Input.GetKeyDown(KeyCode.X))
        {

            //disable the gun script whilst ult is active.
            GameObject gun = GameObject.Find("Guns");
            gun.GetComponent<Guns>().enabled = false;

            weaponSelection.EunhaUltKnife();
            EunhaUltimate();
        }
    }

尝试将对 EunhaUltimate() 的调用移到该 IF 语句之外。你需要有一个触发器来显示你何时按下 X 来触发终极技能,但看起来你目前正在 EunhaUltimate() 内使用 ultActive = true; 行进行此操作。

除了设置 ultActive = true;,你的 EunhaUltimate() 似乎只是检查键盘按下,所以我建议重写你的第一个片段如下:

void Update()
{
    if (Time.time >= QabilityTimer && Input.GetKeyDown(KeyCode.Q))
    {
        Dash();
        QabilityTimer = Time.time + Qcooldown;
    }

    if (Time.time >= EabilityTimer && Input.GetKeyDown(KeyCode.E))
    {
        SpeedBoost();
        EabilityTimer = Time.time + Ecooldown;
    }

    if (meterButton.currentProgress == meterButton.maxProgress)
    {
        ultReady = true;

       // Debug.Log("ult ready");

        if (Input.GetKeyDown(KeyCode.X))
        {

            //disable the gun script whilst ult is active.
            GameObject gun = GameObject.Find("Guns");
            gun.GetComponent<Guns>().enabled = false;

            weaponSelection.EunhaUltKnife();
            ultActive = true; // <--- This is a change
        }
        
    }
    if (ultActive)
    {
        EunhaUltimate(); // <-- this is a change
        ultTimer -= Time.deltaTime;
    }

    if (ultTimer <= 0)
    {
        ResetUltimate();
    }
}