如何从另一个类更改项目的值?

时间:2019-06-16 04:44:30

标签: c# unity3d

对不起,我只是开始使用Unity 3D,我对此没有经验。 每当用户赢得关卡时,我想添加500个硬币, 在我的代码中,当用户获胜时,会弹出一个窗口,但我还想向用户添加500个硬币。
这是我的代码:

<?php
$array = [1, 4, 3, 5, 9, 6, 1, 6, 4, 1, 1, 4, 5, 6, 6, 7, 2, 1, 4, 0];
$j = count($array);
$t = $j-1;
while($j>=0){
    for ($i=0; $i < $t; $i++) { 
        $aux = $array[$i]; 
        if($array[$i]>$array[$i+1]){
            $array[$i] = $array[$i+1];
            $array[$i+1] = $aux;
        }
    }
    $j--;
}
print_r($array);

这是public class GameScreen : BaseScreen { ..... public void OpenWinPopup() { OpenPopup<WinPopup>("Popups/WinPopup", popup => { var gameState = GameLogic.GameState; var levelStars = PlayerPrefs.GetInt("level_stars_" + levelInfo.Number); if (gameState.Score >= levelInfo.Star3Score) { popup.SetStars(3); PlayerPrefs.SetInt("level_stars_" + levelInfo.Number, 3); } else if (gameState.Score >= levelInfo.Star2Score) { popup.SetStars(2); if (levelStars < 3) { PlayerPrefs.SetInt("level_stars_" + levelInfo.Number, 2); } } else if (gameState.Score >= levelInfo.Star3Score) { popup.SetStars(1); if (levelStars < 2) { PlayerPrefs.SetInt("level_stars_" + levelInfo.Number, 1); } } else { popup.SetStars(0); } var levelScore = PlayerPrefs.GetInt("level_score_" + levelInfo.Number); if (levelScore < gameState.Score) { PlayerPrefs.SetInt("level_score_" + levelInfo.Number, gameState.Score); } popup.SetScore(gameState.Score); popup.SetGoals(levelInfo.Goals, gameState, LevelGoalsWidget); }); } } 的类:

CoinSystem

我花了很多时间没有结果,这是我第一次使用Unity 3D。

1 个答案:

答案 0 :(得分:0)

如果您的GameScreen类是从MonoBehaviour派生的,我建议添加一个指向您的CoinSystem的公共变量。示例将其添加到GameScreen.cs

public class GameScreen : BaseScreen
{
    // Add this ↓↓
    public CoinsSystem coinsSystem;
}

然后将您的CoinsSystem资产从“项目”选项卡拖放到您的GameScreen组件属性,该属性将命名为“硬币系统”。

之后,您可以通过CoinsSystem变量访问coinsSystem,例如:

public class GameScreen : BaseScreen
{
    public CoinsSystem coinsSystem;

    public void OpenWinPopup()
    {
        coinsSystem.BuyCoins(500);

        OpenPopup<WinPopup>("Popups/WinPopup", popup =>
        {
            // *Rest of OpenPopup<WinPopup> code*
        });
    }
}

但是,坏习惯是指在每个值获取/设置上的序列化值。建议的用法是通过变量,然后使用专用的Save()Load()函数。部分示例:

public class CoinsSystem : ScriptableObject
{
    private Action<int> onCoinsUpdated;

    public int coins;

    public void BuyCoins(int amount)
    {
        coins += amount;
        onCoinsUpdated?.Invoke(coins);

        // Optionally have this to save on each BuyCoins call:
        // Save()
    }

    public void Save()
    {
        PlayerPrefs.SetInt("num_coins", coins);
    }

    public void Load()
    {
        coins = PlayerPrefs.GetInt("num_coins");
    }
}