Моя первая игра на C # в Unity (знакомство с playerprefs) - PullRequest
0 голосов
/ 01 февраля 2019

В моей игре есть подсчет прибыли, который контролируется переменной addMoney в моем скрипте денег ex.profitcount = addMoney.

Когда я добавляю предпочтение игрока в отношении моей переменной addMoney, по умолчанию значение ProfitCount равно 0, тогда как на самом деле оно должно быть 1. Это моя первая игра, так что это может быть очень просто мелочьючто я неправильно понял или упустил из виду.

moneyCount

public class moneyCount : MonoBehaviour
{

    float timeTillAdd = 1;

    public int addMoney = 1;

    public int money;

    public Text txt;

    // Start is called before the first frame update
    void Start()
    {
        money = PlayerPrefs.GetInt("Money");
        addMoney = PlayerPrefs.GetInt("addmoney");
    }

    // Update is called once per frame
    void Update()
    {
        PlayerPrefs.SetInt("addmoney", addMoney);


        if (Time.time >= timeTillAdd)
        {
            money += addMoney;
            timeTillAdd++;

        }


        txt.text = money.ToString();

        PlayerPrefs.SetInt("Money", money);



    }


}

счет прибыли

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


public class profitCount : MonoBehaviour
{

    public int profitAmount;

    public GameObject moneyManagerObj;
    moneyCount mc;

    public Text txt;

    // Start is called before the first frame update
    void Start()


    {
        mc = moneyManagerObj.GetComponent<moneyCount>();
       // profitAmount = PlayerPrefs.GetInt("profitamount");
    }

    // Update is called once per frame
    void Update()
    {
        profitAmount = mc.addMoney;
        txt.text = profitAmount.ToString();

      //  PlayerPrefs.SetInt("profitamount", profitAmount);

    }
}

shopManager

public class ShopManager : MonoBehaviour
{

    public int item1_cost = 50;
    public int item1_upgrade = 5;
    public int item1_tier = 1;
    public int item2_cost = 50;
    public int item2_upgrade = 5;
    public GameObject moneyManagerObj;
    moneyCount mc;

    public Text txt;
    public Text item1;
    public Text item1_text;

    // Start is called before the first frame update
    void Start()
    {


        mc = moneyManagerObj.GetComponent<moneyCount>();
        item1_cost = PlayerPrefs.GetInt("Item1_cost");
        //item1_upgrade = PlayerPrefs.GetInt("Item1_upgrade");
        item1_tier = PlayerPrefs.GetInt("Item1_tier");


    }

    // Update is called once per frame
    void Update()
    {
        item1.text = item1_tier.ToString();

        PlayerPrefs.SetInt("Item1_cost", item1_cost);
        //  PlayerPrefs.SetInt("Item1_upgrade", item1_upgrade);
        PlayerPrefs.SetInt("Item1_tier", item1_tier);

        if (item1_tier > 0)
        {



            item1_text.text = ("Upgrade");





        }


    }




    public void on_click()


    {


        {

            if (mc.money >= item1_cost)
            {




                mc.money -= item1_cost;
                mc.addMoney += item1_upgrade;
                item1_tier += 1;
                item1.text = item1_tier.ToString();
                item1_cost += 50 * item1_tier;


            }



        }
    }














}

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Две вещи:

  1. Не используйте PlayerPrefs для хранения сохраненных данных.Это не для этого.Он предназначен для сохранения настроек игрока , таких как громкость, полноэкранный режим или тип ввода.Файл, используемый PlayerPrefs, простой текст и не поддерживает сложные типы данных.

  2. Если данные для сохранения не существуют, считанные значения равны нулю (по крайней мере, из PlayerPrefs).Вы должны учитывать это, и в настоящее время вы не являетесь.При переходе к другому методу сохранения вы получите другие ошибки, такие как нулевые указатели или файл не найден.Вы должны определить, существует ли сохранение , и только если оно существует, следует прочитать из него.

0 голосов
/ 01 февраля 2019

Хорошо, поэтому вы присваивали значение по умолчанию addMoney во время инициализации, т.е. public int addMoney = 1;

Но затем при запуске вы снова присваивали ему значение, которое еще не было сохранено addMoney = PlayerPrefs.GetInt("addmoney");

Если вы хотите создать запись, сделайте это так PlayerPrefs.SetInt("addmoney",addmoney);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...