如何在 switch 语句中从另一个脚本更改变量的值?

How to change a variable's value from another script in a switch statement?

提问人:TUK 提问时间:7/24/2023 最后编辑:TUK 更新时间:7/24/2023 访问量:35

问:

我正在构建一个统一的游戏,我希望玩家能够购买永久升级(它将一直持续到游戏结束)。

我的gameObject上有这个脚本:shopManager

public class ShopManager : MonoBehaviour
{
    public int coins;

    //References
    public PlayerController playerCon;
    public HurtEnemy[] hurtEnms;
    public HurtPlayer[] hurtPlas;

    // Start is called before the first frame update
    void Start()
    {
        playerCon = FindObjectOfType<PlayerController>();
        hurtEnms = FindObjectsOfType<HurtEnemy>(); //there are a few weapons that can hurt enemies
        hurtPlas = FindObjectsOfType<HurtPlayer>(); //there are a few enemies that can hurt the player
    }

    public void BuyItem(ShopItem item)
    {
        if (coins>=item.price)
        {
            coins -= item.price;
            ApplyChangesToPlayer(item);
        }
    }

    public void ApplyChangesToPlayer(ShopItem item)
    {
        switch (item.name)
        {
            case "Speed":
                playerCon.speed += 1f;
                break;
            case "Strength": //doing more damage
                foreach (var hurtEnm in hurtEnms)
                    hurtEnm.damage++;
                break;
            case "Reduced damage": //all enemies do less damage
                foreach (var hurtPla in hurtPlas)
                    hurtPla.damagePerHit--;
                break;
            case "Weapon": 
                playerCon.hasWeapon = true;
                break;
        }
    }
}

只有当我选择速度时才会提供提升,但它对其他人不起作用。

我尝试获取的变量(和)在定义它们的脚本中是公开的:hasWeapondamagedamagePerHit

public class HurtEnemy : MonoBehaviour
{
    public int damage;
}
public class HurtPlayer : MonoBehaviour
{
    public int damagePerHit;
}
public class PlayerController : MonoBehaviour
{
    public float speed;
    public bool hasWeapon=false;
}

我不明白为什么速度提升有效,而其他人则不行。

C# unity-game-engine 变量 switch-statement

评论

1赞 MakePeaceGreatAgain 7/24/2023
请说明实际是什么(当然,还有另外两个)。HurtEnemy.hasWeapon
0赞 BugFinder 7/24/2023
那么,您是尝试在交换机中更改另一个可变脚本,还是希望交换机允许“全部”?或者你是在问如何应用“全部”......您的标题和问题似乎不匹配
0赞 TUK 7/24/2023
对不起,我的英语不太好,所以我很难解释。我只想根据物品的名称(玩家购买的物品)更改变量的值。
0赞 BugFinder 7/24/2023
你拥有的代码有什么问题?你能展示一下你是如何操纵这些工作的吗?
0赞 TUK 7/24/2023
当我运行游戏并尝试购买速度提升时,玩家的速度会增加,但是当我尝试购买任何其他东西时,没有任何变化。

答: 暂无答案