【问题标题】:Why is my integer value increasing more than once in Unity3D为什么我的整数值在 Unity3D 中增加不止一次
【发布时间】:2021-11-24 06:41:30
【问题描述】:

我正在使用 Unity3D 和 C# 来创建游戏。当玩家赢得关卡时,我有一些代码将硬币数加 5。这是由以下内容组成的:

if (scoreText.scoreNum >= NumberOfBricksNeeded)
    {
        if(HasClickedOk == false)
        {
            LevelFinishedUIs.SetActive(true);

            if (IsPlayingCampaign1 == true)
            {
                coins.CoinNumber += 5;
                dead.GameOver = false;
                FinishedLevel1UI.SetActive(true);
                Debug.Log("FinishedLevel");
                IsPlayingCampaign1 = false;
                isPlayingCampaign = false;
                HasClickedOk = true;
                One.sprite = OneFin;
                skins.HasEarnedGoldSkin = true;
                skinSaver.Gold = true;
                
                
                campaignSaver.LevelsCompleted = 1;
                
            }

            if (IsPlayingCampaign2 == true)
            {
                coins.CoinNumber += 5;
                dead.GameOver = false;
                FinishedLevel2UI.SetActive(true);
                Debug.Log("FinishedLevel");
                IsPlayingCampaign2 = false;
                isPlayingCampaign = false;
                HasClickedOk = true;
                TwoA.sprite = TwoAFin;
                skins.HasEarnedMeteorSkin = true;
                skinSaver.Meteor = true;
                
                
                campaignSaver.LevelsCompleted = 2;
            }

虽然第一个有效并加了 5,但第二个无效。问题是它在数字上加了 10 而不是 5。我检查了诸如“HasClickedOk”和“isPlayingCampaign_”之类的值,但它们都是适当的值。最初,我以为它运行了两次。但是,我将硬币的数量记录到控制台,它们直接增加了 10。不是 5 两次。有没有可能我错过了什么?

谢谢,

【问题讨论】:

    标签: c# unity3d integer


    【解决方案1】:

    如果IsPlayingCampaign1IsPlayingCampaign2 都为真,那么您将有 10 个添加到硬币而不显式添加到其他地方的唯一方法。

    由于您不使用 if-else,因此两个 if 块正在一个接一个地执行,添加 5 个硬币 x2。

    创建第二个 if,一个 else 语句。

    if (scoreText.scoreNum >= NumberOfBricksNeeded)
        {
            if(HasClickedOk == false)
            {
                LevelFinishedUIs.SetActive(true);
    
                if (IsPlayingCampaign1 == true)
                {
                    coins.CoinNumber += 5;
                    dead.GameOver = false;
                    FinishedLevel1UI.SetActive(true);
                    Debug.Log("FinishedLevel");
                    IsPlayingCampaign1 = false;
                    isPlayingCampaign = false;
                    HasClickedOk = true;
                    One.sprite = OneFin;
                    skins.HasEarnedGoldSkin = true;
                    skinSaver.Gold = true;
                    
                    
                    campaignSaver.LevelsCompleted = 1;
                    
                }
    
                else if (IsPlayingCampaign2 == true)
                {
                    coins.CoinNumber += 5;
                    dead.GameOver = false;
                    FinishedLevel2UI.SetActive(true);
                    Debug.Log("FinishedLevel");
                    IsPlayingCampaign2 = false;
                    isPlayingCampaign = false;
                    HasClickedOk = true;
                    TwoA.sprite = TwoAFin;
                    skins.HasEarnedMeteorSkin = true;
                    skinSaver.Meteor = true;
                    
                    
                    campaignSaver.LevelsCompleted = 2;
                }
    

    【讨论】:

    • 不客气!此外,作为提示 - 您可以从 if 语句中提取通用代码以使代码更清晰;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    相关资源
    最近更新 更多