| Сохранение на 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 
 
   |  |  |  |  |