Сохранение/загрузка с переходом по сценам
dostalition Дата: Чт, 18 Апр 2013, 23:43 | Сообщение # 1
Сообщений: 155
Награды:
0
Репутация:
9
Статус: Offline
Есть такой код Код
using UnityEngine; using System.Collections; public class SaveLoad_C : MonoBehaviour { public Transform CurrentPlayerPosition; void Update () { if(Input.GetKeyDown(KeyCode.X)) savePosition(); if(Input.GetKeyDown(KeyCode.Z)) if (PlayerPrefs.HasKey("PosX")) // проверяем, есть ли в сохранении подобная информация loadPosition(); if(Input.GetKeyDown(KeyCode.C)) PlayerPrefs.DeleteAll(); // очистка всей информации для этого приложения } public void savePosition() { Transform CurrentPlayerPosition = this.gameObject.transform; PlayerPrefs.SetFloat("PosX", CurrentPlayerPosition.position.x); // т.к. автоматической работы PlayerPrefs.SetFloat("PosY", CurrentPlayerPosition.position.y); // с массивами нет, разбиваем на PlayerPrefs.SetFloat("PosZ", CurrentPlayerPosition.position.z); // отдельные float и записываем PlayerPrefs.SetFloat("AngX", CurrentPlayerPosition.eulerAngles.x); PlayerPrefs.SetFloat("AngY", CurrentPlayerPosition.eulerAngles.y); PlayerPrefs.SetString("level", Application.loadedLevelName); // ещё можно писать/читать строки PlayerPrefs.SetInt("level_id", Application.loadedLevel); // и целые } public void loadPosition() { Transform CurrentPlayerPosition = this.gameObject.transform; Vector3 PlayerPosition = new Vector3(PlayerPrefs.GetFloat("PosX"), PlayerPrefs.GetFloat("PosY"), PlayerPrefs.GetFloat("PosZ")); Vector3 PlayerDirection = new Vector3(PlayerPrefs.GetFloat("AngX"), PlayerPrefs.GetFloat("AngY"), 0); // генерируем новые вектора на основе загруженных данных CurrentPlayerPosition.position = PlayerPosition; // и применяем их CurrentPlayerPosition.eulerAngles = PlayerDirection; } }
В нём есть сохранение номера и названия сцены, но нет загрузки оных ... Дописал такую строчку Код
Application.loadedLevel = PlayerPrefs.GetInt("level_id");
, но её , явно, не достаточно ... Нужно ещё как-то сгенерировать сцену из сохранения перед применением ... Подскажите чего не хватает !? ...Добавлено (18.04.2013, 23:43) --------------------------------------------- Вопрос решился вот такой строчкой
Код
Application.LoadLevel(PlayerPrefs.GetInt("level_id"));
Потратил ЦЕЛЫЙ ДЕНЬ на то, чтобы САМОМУ это ВДУПЛИТЬ ... А ведь, мог же Кто-то и подсказать ...
Сообщение Есть такой код Код
using UnityEngine; using System.Collections; public class SaveLoad_C : MonoBehaviour { public Transform CurrentPlayerPosition; void Update () { if(Input.GetKeyDown(KeyCode.X)) savePosition(); if(Input.GetKeyDown(KeyCode.Z)) if (PlayerPrefs.HasKey("PosX")) // проверяем, есть ли в сохранении подобная информация loadPosition(); if(Input.GetKeyDown(KeyCode.C)) PlayerPrefs.DeleteAll(); // очистка всей информации для этого приложения } public void savePosition() { Transform CurrentPlayerPosition = this.gameObject.transform; PlayerPrefs.SetFloat("PosX", CurrentPlayerPosition.position.x); // т.к. автоматической работы PlayerPrefs.SetFloat("PosY", CurrentPlayerPosition.position.y); // с массивами нет, разбиваем на PlayerPrefs.SetFloat("PosZ", CurrentPlayerPosition.position.z); // отдельные float и записываем PlayerPrefs.SetFloat("AngX", CurrentPlayerPosition.eulerAngles.x); PlayerPrefs.SetFloat("AngY", CurrentPlayerPosition.eulerAngles.y); PlayerPrefs.SetString("level", Application.loadedLevelName); // ещё можно писать/читать строки PlayerPrefs.SetInt("level_id", Application.loadedLevel); // и целые } public void loadPosition() { Transform CurrentPlayerPosition = this.gameObject.transform; Vector3 PlayerPosition = new Vector3(PlayerPrefs.GetFloat("PosX"), PlayerPrefs.GetFloat("PosY"), PlayerPrefs.GetFloat("PosZ")); Vector3 PlayerDirection = new Vector3(PlayerPrefs.GetFloat("AngX"), PlayerPrefs.GetFloat("AngY"), 0); // генерируем новые вектора на основе загруженных данных CurrentPlayerPosition.position = PlayerPosition; // и применяем их CurrentPlayerPosition.eulerAngles = PlayerDirection; } }
В нём есть сохранение номера и названия сцены, но нет загрузки оных ... Дописал такую строчку Код
Application.loadedLevel = PlayerPrefs.GetInt("level_id");
, но её , явно, не достаточно ... Нужно ещё как-то сгенерировать сцену из сохранения перед применением ... Подскажите чего не хватает !? ...Добавлено (18.04.2013, 23:43) --------------------------------------------- Вопрос решился вот такой строчкой
Код
Application.LoadLevel(PlayerPrefs.GetInt("level_id"));
Потратил ЦЕЛЫЙ ДЕНЬ на то, чтобы САМОМУ это ВДУПЛИТЬ ... А ведь, мог же Кто-то и подсказать ... Автор - dostalition Дата добавления - 18 Апр 2013 в 23:43
Левша Дата: Пт, 19 Апр 2013, 11:14 | Сообщение # 2
Черный Волк
Сообщений: 7257
Награды:
30
Репутация:
3313
Статус: Offline
А в мануал заглянуть было не судьба ?
X.cor.R (Prologue)
Сообщение А в мануал заглянуть было не судьба ? Автор - Левша Дата добавления - 19 Апр 2013 в 11:14
elektro-volk Дата: Вс, 21 Апр 2013, 06:32 | Сообщение # 3
Сообщений: 13
Награды:
0
Репутация:
-14
Статус: Offline
у меня все по другому там загрузка есть а сохранений нет))) поделюсь кодом Код
textFieldString = GUI.TextField (Rect (700, 150, 100, 30), textFieldString); if (GUI.Button (Rect (700,200,80,20), "3ag6r2z1t")) { Application.LoadLevel ( textFieldString ); }
это главная часть и еще переменная Код
var textFieldString = "код";
Добавлено (21.04.2013, 06:32) --------------------------------------------- у меня все по другому там загрузка есть а сохранений нет))) поделюсь кодом
Код
textFieldString = GUI.TextField (Rect (700, 150, 100, 30), textFieldString); if (GUI.Button (Rect (700,200,80,20), "3ag6r2z1t")) { Application.LoadLevel ( textFieldString ); }
это главная часть и еще переменная Код
var textFieldString = "код";
Сообщение у меня все по другому там загрузка есть а сохранений нет))) поделюсь кодом Код
textFieldString = GUI.TextField (Rect (700, 150, 100, 30), textFieldString); if (GUI.Button (Rect (700,200,80,20), "3ag6r2z1t")) { Application.LoadLevel ( textFieldString ); }
это главная часть и еще переменная Код
var textFieldString = "код";
Добавлено (21.04.2013, 06:32) --------------------------------------------- у меня все по другому там загрузка есть а сохранений нет))) поделюсь кодом
Код
textFieldString = GUI.TextField (Rect (700, 150, 100, 30), textFieldString); if (GUI.Button (Rect (700,200,80,20), "3ag6r2z1t")) { Application.LoadLevel ( textFieldString ); }
это главная часть и еще переменная Код
var textFieldString = "код";
Автор - elektro-volk Дата добавления - 21 Апр 2013 в 06:32