Putting money.text in my shop scene

心已入冬 提交于 2019-12-11 17:17:49

问题


I want my money.text to be in my shop scene to buy some shield. For some reason my money.text is only on the other scene and it's not going in the shop scene.

This is my shop script.

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");
}

}

this is my money script.

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();
}
}

this is my shield.power script

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();
}
}

This is where i put my money.text to show in the canvas scene.(the highlight blue color).


回答1:


Text is an UI component for rendering strings on UI. Each scene need to have its own Text-component. Then you need to keep the amount of money in one place so that every script dealing with money does not have its own MoneyAmount variable. Money script could look like this:

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;
            }
        }
    }
}

...and whenever you use money, you could use

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


来源:https://stackoverflow.com/questions/47747653/putting-money-text-in-my-shop-scene

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!