把钱。文字放在我的商店场景中

时间:2017-12-11 06:41:45

标签: c# unity3d unity3d-gui

我想要我的钱。文字可以在我的商店里购买一些盾牌。 出于某种原因,我的money.text仅限于另一个场景,并且不会进入商店场景。

这是我的商店脚本。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class ShopController : MonoBehaviour {

int MoneyAmount;

int isPowerup1Sold,isPowerup2Sold,isPowerup3Sold;

public Text MoneyAmountText;

public Button Buynow1,Buynow2,Buynow3;

// Use this for initialization
void Start () {
    MoneyAmount = PlayerPrefs.GetInt ("moneyAmount");
}

// Update is called once per frame
void Update () {

    MoneyAmountText.text = "Money : " + MoneyAmount.ToString ();

    isPowerup1Sold = PlayerPrefs.GetInt ("isPowerup1Sold");
    isPowerup2Sold = PlayerPrefs.GetInt ("isPowerup2Sold");
    isPowerup3Sold = PlayerPrefs.GetInt ("isPowerup3Sold");

    if (MoneyAmount >= 50 && isPowerup1Sold == 0)
        Buynow1.interactable = true;
    else
        Buynow1.interactable = false;

    if (MoneyAmount >= 70 && isPowerup2Sold == 0)
        Buynow2.interactable = true;
    else
        Buynow2.interactable = false;

    if (MoneyAmount >= 120 && isPowerup3Sold == 0)
        Buynow3.interactable = true;
    else
        Buynow3.interactable = false;
}

public void buyPowerup1()
{
    MoneyAmount -= 50;
    PlayerPrefs.SetInt ("isPowerup1Sold", 1);
}

public void buyPowerup2()
{
    MoneyAmount -= 70;
    PlayerPrefs.SetInt ("isPowerup2Sold", 1);
}

public void buyPowerup3()
{
    MoneyAmount -= 120;
    PlayerPrefs.SetInt ("isPowerup3Sold", 1);
}
public void exitshop()
{
    PlayerPrefs.SetInt ("moneyAmount", MoneyAmount);
    Application.LoadLevel ("levelselect");
}

}

这是我的钱脚本。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Money : MonoBehaviour {

public Text MoneyText;
public static int MoneyAmount = 0;
// Use this for initialization
void Start () {
    MoneyAmount = PlayerPrefs.GetInt ("moneyAmount",0);

}

// Update is called once per frame
void Update () {
    MoneyText.text = "Money" + MoneyAmount.ToString();
}
}

这是我的shield.power脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Money : MonoBehaviour {

public Text MoneyText;
public static int MoneyAmount = 0;
// Use this for initialization
void Start () {
    MoneyAmount = PlayerPrefs.GetInt ("moneyAmount",0);

}

// Update is called once per frame
void Update () {
    MoneyText.text = "Money" + MoneyAmount.ToString();
}
}

这是我把我的money.text放在画布场景中的地方。(突出显示蓝色)。

1 个答案:

答案 0 :(得分:3)

Text是用于在UI上呈现字符串的UI组件。每个场景都需要有自己的Text-component。 然后你需要在一个地方保留金额,这样每个处理钱的脚本都没有自己的MoneyAmount变量。 Money脚本可能如下所示:

public class Money : MonoBehaviour {

    static int? cachedAmount = null;
    const string playerPrefsKeyName = "moneyAmount";
    const int startMoney = 0;

    public static int Amount {
        get {
            if (cachedAmount == null) {
                cachedAmount = PlayerPrefs.GetInt (playerPrefsKeyName, startMoney);
            }
            return cachedAmount.Value;
        }
        set {
            if (cachedAmount == null || value != cachedAmount.Value) {
                PlayerPrefs.SetInt (playerPrefsKeyName, value);
                cachedAmount = value;
            }
        }
    }
}

......无论何时使用钱,都可以使用

if (Money.Amount >= 70) {
    Money.Amount -= 70;
    MoneyAmountText.text = "Money : " + Money.Amount.ToString ();
}