Сохранение прогресса в Android - Форум Игроделов
Чт, 28 Мар 2024, 19:39 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Игроделов » UNITY3D » СКРИПТИНГ » Сохранение прогресса в Android (Вопрос для продвинутых)
Сохранение прогресса в Android
Thedrhax14Дата: Сб, 24 Окт 2015, 19:43 | Сообщение # 1
 
Сообщений: 54
Награды: 0
Репутация: 1
Статус: Offline
Здраствуйте game creating community!

Не давно я изучил сохранения прогресса игры с помощью PlayerPrefs, ArrayPrefs и Serialization и все было понятно и работало на ПК. Но когда дело дошло android что то пошло не так, а именно android не создавал PlayerPrefs а когда пытался то он вызывал жуткие глюки и лаги не телефоне. К сожелению на телефоне я не смог получить никакие debug и какие процессы проходили и собственно не смог получить источник ошибки.

По идеи я пытался сохранить две вещи (с помощью UnitySerializer V0.965) это две переменные типа List и Unity UI. Как не странно на PC все работает, на андройде как я сказал все очень плохо.

И собственно вопрос: что вы можете посоветовать, чтобы реализовать сохранение и загрузку прогресса?

Вот часть скрипта (переменные и классы, которые я использовал):

Код


#pragma strict
import System.Collections.Generic;
import System;
import Soomla;
import Soomla.Store;

var _Books: List.<Book> = new List.<Book>();
var _Achievments: List.<Achievement> = new List.<Achievement>();
var Game:boolean;
var Time_Next_saving:float;

class Book extends System.Object
{
var Name:String;
var Price:float;
var Cover:Texture;
var BOUGHT:Texture;
var Locked:Texture;
var ID:int;
var Item_id:String;
var Availabe:boolean;
}

class Achievement extends System.Object
{
var Name:String;
var GreenTick:GameObject;
var GotIt:boolean;
}

function Update()
{
if(!Game)
{
if(Time_Next_saving>=0)
{
Time_Next_saving-=Time.deltaTime;
}
else
{
Time_Next_saving = 9;
//LevelSerilizer.CheckPoint();
Debug.Log("Game is saved");
}
}
}


Виду блог про разроботку игр и про свои проекты https://thedrhax14.wordpress.com/

Сообщение отредактировал Thedrhax14 - Сб, 24 Окт 2015, 23:21
 
СообщениеЗдраствуйте game creating community!

Не давно я изучил сохранения прогресса игры с помощью PlayerPrefs, ArrayPrefs и Serialization и все было понятно и работало на ПК. Но когда дело дошло android что то пошло не так, а именно android не создавал PlayerPrefs а когда пытался то он вызывал жуткие глюки и лаги не телефоне. К сожелению на телефоне я не смог получить никакие debug и какие процессы проходили и собственно не смог получить источник ошибки.

По идеи я пытался сохранить две вещи (с помощью UnitySerializer V0.965) это две переменные типа List и Unity UI. Как не странно на PC все работает, на андройде как я сказал все очень плохо.

И собственно вопрос: что вы можете посоветовать, чтобы реализовать сохранение и загрузку прогресса?

Вот часть скрипта (переменные и классы, которые я использовал):

Код


#pragma strict
import System.Collections.Generic;
import System;
import Soomla;
import Soomla.Store;

var _Books: List.<Book> = new List.<Book>();
var _Achievments: List.<Achievement> = new List.<Achievement>();
var Game:boolean;
var Time_Next_saving:float;

class Book extends System.Object
{
var Name:String;
var Price:float;
var Cover:Texture;
var BOUGHT:Texture;
var Locked:Texture;
var ID:int;
var Item_id:String;
var Availabe:boolean;
}

class Achievement extends System.Object
{
var Name:String;
var GreenTick:GameObject;
var GotIt:boolean;
}

function Update()
{
if(!Game)
{
if(Time_Next_saving>=0)
{
Time_Next_saving-=Time.deltaTime;
}
else
{
Time_Next_saving = 9;
//LevelSerilizer.CheckPoint();
Debug.Log("Game is saved");
}
}
}

Автор - Thedrhax14
Дата добавления - 24 Окт 2015 в 19:43
ЛевшаДата: Вс, 25 Окт 2015, 00:53 | Сообщение # 2
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
PlayerPrefs умеет сохранять только 3 типа данных - int, float и string.
Делайте выводы.


X.cor.R (Prologue)
 
СообщениеPlayerPrefs умеет сохранять только 3 типа данных - int, float и string.
Делайте выводы.

Автор - Левша
Дата добавления - 25 Окт 2015 в 00:53
Thedrhax14Дата: Вс, 25 Окт 2015, 06:57 | Сообщение # 3
 
Сообщений: 54
Награды: 0
Репутация: 1
Статус: Offline
Левша
Я знаю об этом, но как то UnitySerializer умудрился сохранить на ПК
Ладно, тогда что можете посоветовать?


Виду блог про разроботку игр и про свои проекты https://thedrhax14.wordpress.com/
 
СообщениеЛевша
Я знаю об этом, но как то UnitySerializer умудрился сохранить на ПК
Ладно, тогда что можете посоветовать?

Автор - Thedrhax14
Дата добавления - 25 Окт 2015 в 06:57
ЛевшаДата: Вс, 25 Окт 2015, 14:47 | Сообщение # 4
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
Переводить свои данные в приемлемый формат для PlayerPrefs и сохранять.
Затем - загружать и применять.


X.cor.R (Prologue)
 
СообщениеПереводить свои данные в приемлемый формат для PlayerPrefs и сохранять.
Затем - загружать и применять.

Автор - Левша
Дата добавления - 25 Окт 2015 в 14:47
Thedrhax14Дата: Вс, 25 Окт 2015, 22:14 | Сообщение # 5
 
Сообщений: 54
Награды: 0
Репутация: 1
Статус: Offline
Левша
Получается только через PlayerPrefs можно сохранять прогресс в android?

Левша
Я нашел решение (слега пришлось усложнить логику скрипта и дополнить некоторыми переменнами)
Ваш совет насчет перевода данных для формата PlayerPrefs подтолкнул меня на это)
Спасибо и +rep


Виду блог про разроботку игр и про свои проекты https://thedrhax14.wordpress.com/

Сообщение отредактировал Thedrhax14 - Вс, 25 Окт 2015, 22:16
 
СообщениеЛевша
Получается только через PlayerPrefs можно сохранять прогресс в android?

Левша
Я нашел решение (слега пришлось усложнить логику скрипта и дополнить некоторыми переменнами)
Ваш совет насчет перевода данных для формата PlayerPrefs подтолкнул меня на это)
Спасибо и +rep

Автор - Thedrhax14
Дата добавления - 25 Окт 2015 в 22:14
ЛевшаДата: Пн, 26 Окт 2015, 13:55 | Сообщение # 6
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
Цитата Thedrhax14 ()
Получается только через PlayerPrefs можно сохранять прогресс в android?

Нет конечно, не только, но это самый простой и надежный путь.


X.cor.R (Prologue)
 
Сообщение
Цитата Thedrhax14 ()
Получается только через PlayerPrefs можно сохранять прогресс в android?

Нет конечно, не только, но это самый простой и надежный путь.

Автор - Левша
Дата добавления - 26 Окт 2015 в 13:55
LeksДата: Вт, 29 Дек 2015, 19:37 | Сообщение # 7
Нет аватара
 
Сообщений: 6
Награды: 0
Репутация: 1
Статус: Offline
Подскажите, почему может не работать сохранение в хml документ?
На компьютере все работает, на устройстве- никакой реакции
Может нужно что-то в настройках при билде прописать? При установке, нормальное приложение обычно запрашивает разрешение на изменение данных устройства, а тут нет
 
СообщениеПодскажите, почему может не работать сохранение в хml документ?
На компьютере все работает, на устройстве- никакой реакции
Может нужно что-то в настройках при билде прописать? При установке, нормальное приложение обычно запрашивает разрешение на изменение данных устройства, а тут нет

Автор - Leks
Дата добавления - 29 Дек 2015 в 19:37
AswoДата: Вт, 29 Дек 2015, 22:06 | Сообщение # 8
КЗОИ
 
Сообщений: 1031
Награды: 18
Репутация: 430
Статус: Offline
Leks, да, в AndroidManifest.xml добавь
Код
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>


end.
 
СообщениеLeks, да, в AndroidManifest.xml добавь
Код
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

Автор - Aswo
Дата добавления - 29 Дек 2015 в 22:06
LeksДата: Вт, 29 Дек 2015, 23:12 | Сообщение # 9
Нет аватара
 
Сообщений: 6
Награды: 0
Репутация: 1
Статус: Offline
Извиняюсь за наверняка глупый вопрос. А это где?
Точнее, куда надо вставлять эту строчку и где найти этот файл.
Заранее благодарен

Добавлено (29 Дек 2015, 23:12)
---------------------------------------------
Файл я нашел, а куда нужно строчку вставить?
Я её второй по счету сделал, ничего не изменилось sad

Сообщение отредактировал Leks - Вт, 29 Дек 2015, 23:10
 
СообщениеИзвиняюсь за наверняка глупый вопрос. А это где?
Точнее, куда надо вставлять эту строчку и где найти этот файл.
Заранее благодарен

Добавлено (29 Дек 2015, 23:12)
---------------------------------------------
Файл я нашел, а куда нужно строчку вставить?
Я её второй по счету сделал, ничего не изменилось sad


Автор - Leks
Дата добавления - 29 Дек 2015 в 23:12
AswoДата: Ср, 30 Дек 2015, 00:29 | Сообщение # 10
КЗОИ
 
Сообщений: 1031
Награды: 18
Репутация: 430
Статус: Offline
Как-то вот так должно быть
Код
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.noname.projectname"
      android:versionCode="1"
      android:versionName="1.0">

      //...

      <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
      <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

      <application android:label="@string/app_name"
            android:icon="@drawable/app_icon">
            //...
      </application>
  
</manifest>


end.
 
СообщениеКак-то вот так должно быть
Код
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.noname.projectname"
      android:versionCode="1"
      android:versionName="1.0">

      //...

      <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
      <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

      <application android:label="@string/app_name"
            android:icon="@drawable/app_icon">
            //...
      </application>
  
</manifest>

Автор - Aswo
Дата добавления - 30 Дек 2015 в 00:29
LeksДата: Чт, 31 Дек 2015, 01:12 | Сообщение # 11
Нет аватара
 
Сообщений: 6
Награды: 0
Репутация: 1
Статус: Offline
вот текст в моем документе, в котором я добавил две строчки отмеченные минусами (в реальном документе их нет) :
Код
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.KsaKsaStudio.MicroinVitro" android:versionName="1.0" android:versionCode="1" android:installLocation="preferExternal">
<supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true" />
<application android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:icon="@drawable/app_icon" android:label="@string/app_name" android:debuggable="false" android:isGame="true" android:banner="@drawable/app_banner">
<activity android:name="com.unity3d.player.UnityPlayerActivity" android:label="@string/app_name" android:screenOrientation="sensorLandscape" android:launchMode="singleTask" android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
</activity>
</application>
<uses-sdk android:minSdkVersion="11" android:targetSdkVersion="23" />
<uses-feature android:glEsVersion="0x00020000" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>----------------------
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />-----------------------
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
<uses-feature android:name="android.hardware.touchscreen.multitouch" android:required="false" />
<uses-feature android:name="android.hardware.touchscreen.multitouch.distinct" android:required="false" />
</manifest>

но ничего не не работает. Разрешение не спрашивает и не сохраняет. Может я все же не туда вставил?
Да, и ещё: после проведения билдинга эти строчки пропадают.

Добавлено (31 Дек 2015, 01:12)
---------------------------------------------
Да, я вот заметил что после компиляции игры, все изменения внесенные мною в этот документ пропадают. Что может мешать мне править этот документ?

Сообщение отредактировал Leks - Ср, 30 Дек 2015, 21:29
 
Сообщениевот текст в моем документе, в котором я добавил две строчки отмеченные минусами (в реальном документе их нет) :
Код
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.KsaKsaStudio.MicroinVitro" android:versionName="1.0" android:versionCode="1" android:installLocation="preferExternal">
<supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true" />
<application android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:icon="@drawable/app_icon" android:label="@string/app_name" android:debuggable="false" android:isGame="true" android:banner="@drawable/app_banner">
<activity android:name="com.unity3d.player.UnityPlayerActivity" android:label="@string/app_name" android:screenOrientation="sensorLandscape" android:launchMode="singleTask" android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
</activity>
</application>
<uses-sdk android:minSdkVersion="11" android:targetSdkVersion="23" />
<uses-feature android:glEsVersion="0x00020000" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>----------------------
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />-----------------------
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
<uses-feature android:name="android.hardware.touchscreen.multitouch" android:required="false" />
<uses-feature android:name="android.hardware.touchscreen.multitouch.distinct" android:required="false" />
</manifest>

но ничего не не работает. Разрешение не спрашивает и не сохраняет. Может я все же не туда вставил?
Да, и ещё: после проведения билдинга эти строчки пропадают.

Добавлено (31 Дек 2015, 01:12)
---------------------------------------------
Да, я вот заметил что после компиляции игры, все изменения внесенные мною в этот документ пропадают. Что может мешать мне править этот документ?


Автор - Leks
Дата добавления - 31 Дек 2015 в 01:12
AswoДата: Чт, 31 Дек 2015, 13:51 | Сообщение # 12
КЗОИ
 
Сообщений: 1031
Награды: 18
Репутация: 430
Статус: Offline
Leks, в руководстве написано положить его в Assets->Plugins->Android. Он должен заменить дефолтный.

end.
 
СообщениеLeks, в руководстве написано положить его в Assets->Plugins->Android. Он должен заменить дефолтный.

Автор - Aswo
Дата добавления - 31 Дек 2015 в 13:51
LeksДата: Пт, 01 Янв 2016, 17:41 | Сообщение # 13
Нет аватара
 
Сообщений: 6
Награды: 0
Репутация: 1
Статус: Offline
КЗОИ, а в каком руководстве? Можешь дать ссылку, сам постараюсь разобраться, а то
у меня такого пути в проекте нет. Я наверное своими постоянными проблемами уже тебе надоел biggrin .
 
СообщениеКЗОИ, а в каком руководстве? Можешь дать ссылку, сам постараюсь разобраться, а то
у меня такого пути в проекте нет. Я наверное своими постоянными проблемами уже тебе надоел biggrin .

Автор - Leks
Дата добавления - 01 Янв 2016 в 17:41
AswoДата: Пт, 01 Янв 2016, 20:15 | Сообщение # 14
КЗОИ
 
Сообщений: 1031
Награды: 18
Репутация: 430
Статус: Offline
Leks, PluginsForAndroid

end.
 
СообщениеLeks, PluginsForAndroid

Автор - Aswo
Дата добавления - 01 Янв 2016 в 20:15
LeksДата: Сб, 02 Янв 2016, 00:04 | Сообщение # 15
Нет аватара
 
Сообщений: 6
Награды: 0
Репутация: 1
Статус: Offline
КЗОИ, спасибо большое, буду разбираться

Добавлено (02 Янв 2016, 00:04)
---------------------------------------------
Вот же... Теперь он спрашивает разрешение на изменение данных, а толку все равно никакого.
А можно ли сделать, чтобы на андроиде выводились ошибки как в юнити при тестовом запуске проекта? А то не поймешь в чем проблема, может ему, например, место где я сохраняю не нравится или ещё что.

 
СообщениеКЗОИ, спасибо большое, буду разбираться

Добавлено (02 Янв 2016, 00:04)
---------------------------------------------
Вот же... Теперь он спрашивает разрешение на изменение данных, а толку все равно никакого.
А можно ли сделать, чтобы на андроиде выводились ошибки как в юнити при тестовом запуске проекта? А то не поймешь в чем проблема, может ему, например, место где я сохраняю не нравится или ещё что.


Автор - Leks
Дата добавления - 02 Янв 2016 в 00:04
AswoДата: Сб, 02 Янв 2016, 12:51 | Сообщение # 16
КЗОИ
 
Сообщений: 1031
Награды: 18
Репутация: 430
Статус: Offline
Leks, как вариант, можете поставить Android Studio, там есть Android Device Monitor, который выводит все логи. Возможно, этот инструмент есть и отдельно, я не знаю точно.

end.
 
СообщениеLeks, как вариант, можете поставить Android Studio, там есть Android Device Monitor, который выводит все логи. Возможно, этот инструмент есть и отдельно, я не знаю точно.

Автор - Aswo
Дата добавления - 02 Янв 2016 в 12:51
LeksДата: Сб, 02 Янв 2016, 19:36 | Сообщение # 17
Нет аватара
 
Сообщений: 6
Награды: 0
Репутация: 1
Статус: Offline
Спасибо за помощь, мне наконец-то удалось реализовать сохранение в хмl файл.
Для этого пришлось создать тот путь что выше описан и положить в него изменённый AndroidManifest.xml, плюс при создании
нового файла прописать в имени полный его путь ( например: "/storage/sdcard0/com.Ksa-Ksa_Studio/SaveRecord.xml").
 
СообщениеСпасибо за помощь, мне наконец-то удалось реализовать сохранение в хмl файл.
Для этого пришлось создать тот путь что выше описан и положить в него изменённый AndroidManifest.xml, плюс при создании
нового файла прописать в имени полный его путь ( например: "/storage/sdcard0/com.Ksa-Ksa_Studio/SaveRecord.xml").

Автор - Leks
Дата добавления - 02 Янв 2016 в 19:36
Форум Игроделов » UNITY3D » СКРИПТИНГ » Сохранение прогресса в Android (Вопрос для продвинутых)
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024