Вторник, 19 Марта 2024, 07:13

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Сохранение на Android'e
Сохранение на Android'e
SovaDeveloperДата: Четверг, 24 Ноября 2016, 16:27 | Сообщение # 1
был не раз
Сейчас нет на сайте
Всем доброго времени суток. В Unity я от силы неделю , и по разнообразным видео урокам, пытаюсь сделать "топ" кликер, так сказать первую экспериментальную игрушку. В процессе создания столкнулся с проблемой , связанная с сохранением данных игры, сохраняю через PlayerPrefs. В самом Unity все работает на ура, но вот когда на телефон ставлю игрушку, при выходе из приложения (!!!Да забыл упомянуть, что я использую функцию OnApplictionQuit()) ничего не сохраняется....
Вот видео урок по которому я это пытался реализовать - https://www.youtube.com/watch?v=R8TsSqlygg4
Вот мои коды:
Код

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

public class gameController : MonoBehaviour {

    public int coins;
    public Text coinText;
    public int coinsPerClick =1;

    void Start () {
        coins = PlayerPrefs.GetInt("coins");
        coinsPerClick = PlayerPrefs.GetInt("coinsPerClick");

            coinsPerClick = 1;
    }
    
    void Update () {
        coinText.text = coins + " $";

        PlayerPrefs.SetInt("coins", coins);
        PlayerPrefs.SetInt("coinsPerClick", coinsPerClick);

    }
    public void addCoins(int coin)
    {
        coins = coins + coinsPerClick;
    }
    public int coinsOnClick()
    {
        return coinsPerClick;
    }
    void OnApplicationQuit()
    {

    }
}


Код

using UnityEngine;
using System.Collections;

public class coinController : MonoBehaviour {

    GameObject gc;
    public int coinsPerClick;

    void Start () {
        gc = GameObject.Find("gameController");
        coinsPerClick = gc.GetComponent<gameController <img rel="usm" src="/SML/angry.gif" border="0" align="absmiddle" alt=" <img rel="usm" src="/SML/angry.gif" border="0" align="absmiddle" alt=" <img rel="usm" src="/SML/angry.gif" border="0" align="absmiddle" alt=">(" /> " /> " /> ).coinsOnClick();
    }
    
    // Update is called once per frame
    void Update () {
    
    }
    void OnMouseUp()
    {
        gc.GetComponent<gameController <gameController <img rel="usm" src="/SML/angry.gif" border="0" align="absmiddle" alt=" <img rel="usm" src="/SML/angry.gif" border="0" align="absmiddle" alt=">(" /> " /> ).addCoins(coinsPerClick);
    }
}


Добавлено (24 ноября 2016, 16:24)
---------------------------------------------
Собсна попробовал запихнуть все PlayerPrefs.SetInt() в Update(),и все заработало , НО возник вопрос, повлияет ли это как-то на производительность и правильно ли я сделал вообще?

Добавлено (24 ноября 2016, 16:27)
---------------------------------------------
APK файл https://yadi.sk/d/SWxy6aABzNtVR
Мало ли пригодится чтоб разобраться в моем "шедевре"

Сообщение отредактировал SovaDeveloper - Четверг, 24 Ноября 2016, 16:26
rumyancevpavelДата: Четверг, 24 Ноября 2016, 18:07 | Сообщение # 2
был не раз
Сейчас нет на сайте
Как ни пытался, ничего понять не смог.
SovaDeveloperДата: Четверг, 24 Ноября 2016, 19:27 | Сообщение # 3
был не раз
Сейчас нет на сайте
rumyancevpavel, Что все на столько плохо? XD

Сообщение отредактировал SovaDeveloper - Четверг, 24 Ноября 2016, 19:27
martukДата: Четверг, 24 Ноября 2016, 21:39 | Сообщение # 4
заслуженный участник
Сейчас нет на сайте
повлияет ли это как-то на производительность << Конечно, постоянный доступ к хранилищу скажет о себе. Я конечно мало разбираюсь в ваших Unity3d, но скажу точно - это в update сувать не следует. + Не уверен, что PlayerPrefs не единственное решение.

Сообщение отредактировал martuk - Четверг, 24 Ноября 2016, 21:40
URGINSANДата: Четверг, 24 Ноября 2016, 23:14 | Сообщение # 5
почти ветеран
Сейчас нет на сайте
PlayerPrefs может не сработать в Start(), делай в старте запуск корутины с отсрочкой 0.5 секунды и оттуда юзай playerPrefs, тогда должно сработать. У меня на андроиде такой способ отлично работает.
Что-то типа этого:
Код

void Start()
{
    StartCoroutine(_start());
}
IENumerator _start()
{
    yield return new WaitForSeconds(0.5f); //отсрочка корутины
    //тут вставляй свой плеер префс
}


Я на драйве

Сообщение отредактировал URGINSAN - Четверг, 24 Ноября 2016, 23:15
valera_zaДата: Пятница, 25 Ноября 2016, 00:10 | Сообщение # 6
участник
Сейчас нет на сайте
URGINSAN,
Цитата

PlayerPrefs может не сработать в Start(), делай в старте запуск корутины с отсрочкой 0.5 секунды и оттуда юзай playerPrefs

cтранно у меня ничего никогда не правильно не работало,все в старте но код отдельно,даже на GameObject -ах,
что то типа
Код

using UnityEngine;
using System.Collections;

public class LoadPrefs : MonoBehaviour {

    void Start () {
  PlayerPrefs.SetInt("life", 0);
  PlayerPrefs.SetInt("LifeCount", 0);

    }
    
    
}

SovaDeveloper,
может там какой момент с OnApplictionQuit()), я не использовал без него работает :)
у меня просто через Application.Quit();


Сообщение отредактировал valera_za - Пятница, 25 Ноября 2016, 00:37
URGINSANДата: Пятница, 25 Ноября 2016, 00:57 | Сообщение # 7
почти ветеран
Сейчас нет на сайте
valera_za, я несколько раз замечал, что не всегда через старт удается что-то выполнить. Думаю ТС просто обязан мой способ попробовать B)

Я на драйве
valera_zaДата: Пятница, 25 Ноября 2016, 01:10 | Сообщение # 8
участник
Сейчас нет на сайте
URGINSAN, ну раз обязан я не настаиваю respect
URGINSAN, если будут в таких случаях проблемы воспользуюсь корутиной , и поставлю тебе плюсик!
SovaDeveloper, я видео просмотрел, не знаю парень пишет приложение , он то его должен на устройстве запустить и чтоб все работало,вот.
martuk,
идея с Update -не надо ,да и смысл...
Цитата

+ Не уверен, что PlayerPrefs не единственное решение.

это самое простое решение , и использование его именно как никак уместно. :)


Сообщение отредактировал valera_za - Пятница, 25 Ноября 2016, 02:23
dreenlineДата: Пятница, 25 Ноября 2016, 04:04 | Сообщение # 9
постоянный участник
Сейчас нет на сайте
Мне кажется, что лучше PlayerPrefs.SetInt("coins", coins); запихнуть в аддКоинс, и убрать его из update()
Код

public void addCoins(int coin)
    {
        coins = coins + coinsPerClick;
         PlayerPrefs.SetInt("coins", coins);
          coins = PlayerPrefs.GetInt("coins");
    }


Объясните, зачем нужен
Код
public int coinsOnClick()
    {
        return coinsPerClick;
    }
RangerДата: Пятница, 25 Ноября 2016, 04:48 | Сообщение # 10
почти ветеран
Сейчас нет на сайте
doc

Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Сохранение на Android'e
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг