PlayerPrefs загружает уровень, но не позицию игрока

Программирование на Юнити.

Re: PlayerPrefs загружает уровень, но не позицию игрока

Сообщение IDoNotExist 24 авг 2018, 15:30

SashaNyasha писал(а):
IDoNotExist писал(а):После загрузки сцены в ней скрипт PlayerPrefsSave присутствует то? И если да, то как он туда попал? Он заранее был на каком - либо гейм объекте сцены, или пришел туда через DontDestroyOnLoad()?


Через DontDestroyOnLoad

В таком случае, Start у тебя вызовется один раз, на той сцене на которой был изначально этот скрипт, впиши LoadPosition() сразу после LoadScene() и будет тебе счастье.
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

Re: PlayerPrefs загружает уровень, но не позицию игрока

Сообщение SashaNyasha 24 авг 2018, 17:03

IDoNotExist писал(а):
SashaNyasha писал(а):
IDoNotExist писал(а):После загрузки сцены в ней скрипт PlayerPrefsSave присутствует то? И если да, то как он туда попал? Он заранее был на каком - либо гейм объекте сцены, или пришел туда через DontDestroyOnLoad()?


Через DontDestroyOnLoad

В таком случае, Start у тебя вызовется один раз, на той сцене на которой был изначально этот скрипт, впиши LoadPosition() сразу после LoadScene() и будет тебе счастье.


Снова загружается уровень без позиции игрока

using System.Collections;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class PlayerPrefsSave : MonoBehaviour {
public Transform CurrentPlayerPosition;

public float xPos;
public float yPos;
public float zPos;

// Use this for initialization
void Start(){
//CurrentPlayerPosition = GameObject.Find ("Player");


}



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

}

public void LoadLevel(){
SceneManager.GetSceneByName (PlayerPrefs.GetString ("LostLevel"));
SceneManager.GetSceneByBuildIndex (PlayerPrefs.GetInt ("currentscenesave"));
//SceneManager.LoadScene (PlayerPrefs.GetInt ("currentscenesave"));
SceneManager.LoadScene (PlayerPrefs.GetString ("LostLevel"));

LoadPosition ();



}

public void LoadPosition(){

CurrentPlayerPosition.transform.position = new Vector3 (PlayerPrefs.GetFloat ("XPosition"),
PlayerPrefs.GetFloat ("YPosition"), PlayerPrefs.GetFloat ("ZPosition"));

}


public void savePosition(){



PlayerPrefs.SetFloat ("XPosition", CurrentPlayerPosition.transform.position.x);
PlayerPrefs.SetFloat ("YPosition", CurrentPlayerPosition.transform.position.y);
PlayerPrefs.SetFloat ("ZPosition", CurrentPlayerPosition.transform.position.z);

string scName = SceneManager.GetActiveScene().name;
// PlayerPrefs.SetInt ("currentscenesave",SceneManager.GetActiveScene().buildIndex);
PlayerPrefs.SetString ("LostLevel", scName);
}

}
SashaNyasha
UNIт
 
Сообщения: 51
Зарегистрирован: 13 авг 2015, 16:20

Re: PlayerPrefs загружает уровень, но не позицию игрока

Сообщение DimaJoke 24 авг 2018, 17:30

IDoNotExist писал(а):
DimaJoke писал(а):
IDoNotExist писал(а):Ну и как ты определил что позиция не загружается?

Ну наверное потому что, при заходе на уровень позиция перса становится дэфолтной, а не той, которая сохранена...

Во - первых, как установка позиции на перса связана с ЗАГРУЗКОЙ из префсов? Во вторых, почему ТСа отвечаешь ты?

comon, я тебе объяснил свою точку зрения на то, как он понимает что позиция не грузит.

П.С. Давай не будем продолжать, не хочу засорять тему.
Что бы повзрослеть, человек должен преодолеть ошибки юности.

Поэтому я снова здесь..
Аватара пользователя
DimaJoke
UNITрон
 
Сообщения: 293
Зарегистрирован: 12 авг 2018, 18:59
Откуда: Ульяновск
  • Сайт

Re: PlayerPrefs загружает уровень, но не позицию игрока

Сообщение SashaNyasha 24 авг 2018, 20:35

IDoNotExist писал(а):
SashaNyasha писал(а):
IDoNotExist писал(а):После загрузки сцены в ней скрипт PlayerPrefsSave присутствует то? И если да, то как он туда попал? Он заранее был на каком - либо гейм объекте сцены, или пришел туда через DontDestroyOnLoad()?


Через DontDestroyOnLoad

В таком случае, Start у тебя вызовется один раз, на той сцене на которой был изначально этот скрипт, впиши LoadPosition() сразу после LoadScene() и будет тебе счастье.



Снова загружается уровень без позиции игрока

using System.Collections;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class PlayerPrefsSave : MonoBehaviour {
public Transform CurrentPlayerPosition;

public float xPos;
public float yPos;
public float zPos;

// Use this for initialization
void Start(){
//CurrentPlayerPosition = GameObject.Find ("Player");


}



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

}

public void LoadLevel(){
SceneManager.GetSceneByName (PlayerPrefs.GetString ("LostLevel"));
SceneManager.GetSceneByBuildIndex (PlayerPrefs.GetInt ("currentscenesave"));
//SceneManager.LoadScene (PlayerPrefs.GetInt ("currentscenesave"));
SceneManager.LoadScene (PlayerPrefs.GetString ("LostLevel"));

LoadPosition ();



}

public void LoadPosition(){

CurrentPlayerPosition.transform.position = new Vector3 (PlayerPrefs.GetFloat ("XPosition"),
PlayerPrefs.GetFloat ("YPosition"), PlayerPrefs.GetFloat ("ZPosition"));

}


public void savePosition(){



PlayerPrefs.SetFloat ("XPosition", CurrentPlayerPosition.transform.position.x);
PlayerPrefs.SetFloat ("YPosition", CurrentPlayerPosition.transform.position.y);
PlayerPrefs.SetFloat ("ZPosition", CurrentPlayerPosition.transform.position.z);

string scName = SceneManager.GetActiveScene().name;
// PlayerPrefs.SetInt ("currentscenesave",SceneManager.GetActiveScene().buildIndex);
PlayerPrefs.SetString ("LostLevel", scName);
}

}
SashaNyasha
UNIт
 
Сообщения: 51
Зарегистрирован: 13 авг 2015, 16:20

Re: PlayerPrefs загружает уровень, но не позицию игрока

Сообщение 1max1 24 авг 2018, 20:49

а в каком месте ты делаешь сейв?
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: PlayerPrefs загружает уровень, но не позицию игрока

Сообщение SashaNyasha 24 авг 2018, 21:44

1max1 писал(а):а в каком месте ты делаешь сейв?


Сохранение работает, проблема в загрузке. Мне нужно что загружались и уровень, и позиция на кнопку

public void savePosition(){



PlayerPrefs.SetFloat ("XPosition", CurrentPlayerPosition.transform.position.x);
PlayerPrefs.SetFloat ("YPosition", CurrentPlayerPosition.transform.position.y);
PlayerPrefs.SetFloat ("ZPosition", CurrentPlayerPosition.transform.position.z);

string scName = SceneManager.GetActiveScene().name;
// PlayerPrefs.SetInt ("currentscenesave",SceneManager.GetActiveScene().buildIndex);
PlayerPrefs.SetString ("LostLevel", scName);
}
SashaNyasha
UNIт
 
Сообщения: 51
Зарегистрирован: 13 авг 2015, 16:20

Re: PlayerPrefs загружает уровень, но не позицию игрока

Сообщение Heliosis 15 ноя 2018, 23:14

SashaNyasha писал(а):CurrentPlayerPosition.transform.position = new Vector3 (PlayerPrefs.GetFloat ("XPosition"),
PlayerPrefs.GetFloat ("YPosition"), PlayerPrefs.GetFloat ("ZPosition"));


Ну, CurrentPlayerPosition и так Transform, зачем получать его transform еще раз - неясно.

В последние разы игроку неоткуда получить эти координаты, ибо в Start() его не находит скрипт, а LoadPosition() не вызовется, потому что нет DontDestroyOnLoad.
А в более раннем примере, ты объявляешь переменную:
Синтаксис:
Используется csharp
public GameObject CurrentPlayerPosition;

А потом резко на нее забиваешь, и объявляешь еще одну локальную (с тем же названием!):
Синтаксис:
Используется csharp
void LoadPosition(){
Transform CurrentPlayerPosition = this.gameObject.transform;
//...
}


Ты присваиваешь значения локальной переменной, а не игроку.

P.S.: и да, мне все равно, что прошло уже несколько месяцев -. -
Heliosis
UNIт
 
Сообщения: 147
Зарегистрирован: 10 фев 2016, 20:50

Пред.

Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11