实例化有时只能统一工作

Instantiate is only working sometimes in unity

我在 2d 横向卷轴游戏中遇到了一个奇怪的问题,unity 有时只会在按下开火时创建我的射弹克隆,它会正确地从库存中移除 1 个手榴弹,无论手榴弹是否是克隆与否。 这是我的代码

void ThrowGranade()
{
    if (grenandeInventory > 0)
    {

        GameObject grenade = Instantiate(projectile, projectileSpawnPoint.transform.position, Quaternion.identity) as GameObject;
        grenandeInventory =- 1;
        //am.ThrowGrenade();

    }
    else if (grenandeInventory <= 0)
    {
        grenandeInventory = 0;
    }                
}

以及更新函数中保存的点火按钮脚本

        if (Input.GetButtonDown("Fire1"))
    {
        if (grenandeInventory>0)
        {
            grenandeInventory -= 1;
            ThrowGranade();
        }

    }

我在弹丸本身的启动函数中添加力

void Start () {
    #region REFERENCES
    anim = GetComponent<Animator>();
    am = FindObjectOfType<AudioManager>();
    rb = GetComponent<Rigidbody2D>();
    player = FindObjectOfType<PlayerScript>();
    capsule = GetComponent<CapsuleCollider2D>();
    #endregion

    rb.AddForce(Vector2.right * player.projectileForce, ForceMode2D.Force);


}

您不应该在投掷手榴弹方法和在调用该方法之前单击按钮时都进行检查。您现在设置的方式是,如果您有 1 个手榴弹,则在调用 throwGrenade 之前从手榴弹计数中减去,以便您的 throwGrenade 看到您有 0 个手榴弹。就这样做吧。

if (Input.GetButtonDown("Fire1"))
{
        ThrowGranade();
}

您的 ThrowGranade() 方法已经处理了逻辑。