Суббота, 20 Апреля 2024, 08:45

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Сохранение в мобильной игре
Сохранение в мобильной игре
Knife_KillДата: Вторник, 10 Ноября 2015, 10:15 | Сообщение # 1
частый гость
Сейчас нет на сайте
Здравствуйте, у меня имеется небольшая мобильная игра, так же в игре имеется магазин с улучшениями (пока примитивный), суть в том, что нужно реализовать сохранения значений maxBull и maxInvis, как это сделать? Есть ли уроки? Пробовал через PlayerPrefs, но в таком случае в игре при подбирании бонуса ничего не происходит (скорее всего значение становится = 0, почему? (до этого все работало, но при выходе из игры все значения сбрасывались 0)
"bonused" - префаб с значениями (игрок), во второй сцене он создается.

Код
using UnityEngine;
using System.Collections;

public class MainMenu : MonoBehaviour
{

    public AudioSource music;
    public bool isActive = false;
    public GameObject bonused;

    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

    }

    void OnGUI()
    {
        if (GUI.Button(new Rect(Screen.width / 2 - 250, Screen.height / 2 - 20, 150, 60), "Play"))
        {
            Application.LoadLevel("game");

            if (PlayerPrefs.HasKey("maxBullet") && PlayerPrefs.HasKey("maxInis"))

            {
                bonused.GetComponent<ControlPlayer>().maxBullet = PlayerPrefs.GetInt("maxBull");
                bonused.GetComponent<ControlPlayer>().maxInvis = PlayerPrefs.GetInt("maxInvis");
            }

        }

        if (GUI.Button(new Rect(Screen.width / 2 - 50, Screen.height / 2 - 20, 150, 60), "Sound: On/Off"))
        {
            if (isActive == true)
            {
                music.mute = false;
                isActive = false;
            }

            else if (isActive == false)
            {
                music.mute = true;
                isActive = true;
            }

        }

        if (GUI.Button(new Rect(Screen.width / 2 - 50, Screen.height / 2 + 70, 150, 60), "Shop"))
        {
            bonused.GetComponent<ControlPlayer>().maxBullet++;
            bonused.GetComponent<ControlPlayer>().maxInvis++;
           Save();
        }

        if (GUI.Button(new Rect(Screen.width / 2 + 150, Screen.height / 2 - 20, 150, 60), "Exit"))
        {
            Application.Quit();
        }
    }

    void Save()
    {
        int saveBull = bonused.GetComponent<ControlPlayer>().maxBullet;
        int saveInvis = bonused.GetComponent<ControlPlayer>().maxInvis;
        PlayerPrefs.SetInt("maxBullet", saveBull);
        PlayerPrefs.SetInt("maxInis", saveInvis);
    }
}


П.с. про вред использования GetComponent прошу не писать, в дальнейшем попробую найти альтернативу.

Добавлено (10 ноября 2015, 10:15)
---------------------------------------------
АП

Сообщение отредактировал Knife_Kill - Вторник, 10 Ноября 2015, 10:15
manonedgeДата: Вторник, 10 Ноября 2015, 10:23 | Сообщение # 2
почетный гость
Сейчас нет на сайте
В плеерпрефс надо не только указать значение, но вызывать функцию сохранения.
Knife_KillДата: Вторник, 10 Ноября 2015, 10:39 | Сообщение # 3
частый гость
Сейчас нет на сайте
Цитата manonedge ()
В плеерпрефс надо не только указать значение, но вызывать функцию сохранения.


Можете привести пример? Зарание благодарю
irinautkinaДата: Вторник, 10 Ноября 2015, 10:57 | Сообщение # 4
участник
Сейчас нет на сайте
PlayerPrefs.SetInt("maxBullet", saveBull);
PlayerPrefs.SetInt("maxInis", saveInvis);

PlayerPrefs.Save();
Knife_KillДата: Среда, 11 Ноября 2015, 09:16 | Сообщение # 5
частый гость
Сейчас нет на сайте
Цитата irinautkina ()
PlayerPrefs.SetInt("maxBullet", saveBull);...

Благодарю

Добавлено (10 ноября 2015, 20:41)
---------------------------------------------
Хммм.. Ребята, на ПК данный код работает (вроде как), а на Андроид нет, чем может быть проблема? PlayerPrefs на Android работает так же как и на ПК?

Код
using UnityEngine;
using System.Collections;

public class MainMenu : MonoBehaviour
{

    public AudioSource music;
    public bool isActive = false;
    public GameObject bonused;

    // Use this for initialization
    void Start()
    {
        bonused.GetComponent<ControlPlayer>().maxBullet = PlayerPrefs.GetInt("maxBull");
        bonused.GetComponent<ControlPlayer>().maxInvis = PlayerPrefs.GetInt("maxInvis");
    }

    // Update is called once per frame
    void Update()
    {

    }

    void OnGUI()
    {
        if (GUI.Button(new Rect(Screen.width / 2 - 250, Screen.height / 2 - 20, 150, 60), "Play"))
        {
            Application.LoadLevel("game");
        }

        if (GUI.Button(new Rect(Screen.width / 2 - 50, Screen.height / 2 - 20, 150, 60), "Sound: On/Off"))
        {
            if (isActive == true)
            {
                music.mute = false;
                isActive = false;
            }

            else if (isActive == false)
            {
                music.mute = true;
                isActive = true;
            }

        }

        if (GUI.Button(new Rect(Screen.width / 2 - 50, Screen.height / 2 + 70, 150, 60), "Shop"))
        {
            bonused.GetComponent<ControlPlayer>().maxBullet++;
            bonused.GetComponent<ControlPlayer>().maxInvis++;
            Save();
        }

        if (GUI.Button(new Rect(Screen.width / 2 + 150, Screen.height / 2 - 20, 150, 60), "Exit"))
        {
            Save();
            Application.Quit();
        }
    }

    void Save()
    {
        int saveBull = bonused.GetComponent<ControlPlayer>().maxBullet;
        int saveInvis = bonused.GetComponent<ControlPlayer>().maxInvis;
        PlayerPrefs.SetInt("maxBullet", saveBull);
        PlayerPrefs.SetInt("maxInis", saveInvis);
        PlayerPrefs.Save();
    }
}

Добавлено (11 ноября 2015, 09:16)
---------------------------------------------
up

NightLordДата: Четверг, 12 Ноября 2015, 00:57 | Сообщение # 6
участник
Сейчас нет на сайте
Сохранение происходит в другом потоке.
Подозреваю, что юнити тупо не успевает сохранить изменения и вырубает все потоки. Работа с диском довольно медленная операция.


Часто стоишь в пробке или очереди? Эта игра поможет скоротать время 7Bricks - головоломка с цифрами.
berilДата: Четверг, 12 Ноября 2015, 01:34 | Сообщение # 7
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
PlayerPrefs.Save() убери эту строчку smile Ошибки какие то выдает? Значения записываются ,"отдебажь" все



Накодил? Убери за собой!
Инвентарь в Unity(UI)
Инвентарь в Unity(GUI)
manonedgeДата: Суббота, 14 Ноября 2015, 11:11 | Сообщение # 8
почетный гость
Сейчас нет на сайте
Как оно у тебя на компе работает, если ты для чтения и для записи разные поля используешь.
При записи у тебя maxBullet и maxInis, а при чтении - maxBull и maxInvis. Смотрел в коде чуть выше.
В самом первом посте вообще еще и hasKey другие названия.


Сообщение отредактировал manonedge - Суббота, 14 Ноября 2015, 11:12
VakhrushevДата: Пятница, 03 Февраля 2017, 02:13 | Сообщение # 9
уже был
Сейчас нет на сайте
Knife_Kill, ещё в шапке скрипта не всё указано, что должен использовать Unity.
Для PlayerPrefs на мобилке обязательно в твоём случае должно быть так:

Код
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System;


Далее как обычно. Мне это решило проблему, но, если это не получится, можно в AndroidManifest.xml прописать:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Этот файл находится в \Unity\Editor\Data\PlaybackEngines\androidplayer и в папке Temp проекта. Не знаю, нужно ли его переносить в plugins/android shutup
Это даст разрешение на чтение-запись на карту памяти
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Сохранение в мобильной игре
  • Страница 1 из 1
  • 1
Поиск:

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