Сохранение на 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, я несколько раз замечал, что не всегда через старт удается что-то выполнить. Думаю ТС просто обязан мой способ попробовать
Я на драйве
|
|
| |
valera_za | Дата: Пятница, 25 Ноября 2016, 01:10 | Сообщение # 8 |
участник
Сейчас нет на сайте
| URGINSAN, ну раз обязан я не настаиваю 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
|
|
| |