Страница 2 из 2

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

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


Через DontDestroyOnLoad

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

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

СообщениеДобавлено: 24 авг 2018, 17:03
SashaNyasha
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);
}

}

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

СообщениеДобавлено: 24 авг 2018, 17:30
DimaJoke
IDoNotExist писал(а):
DimaJoke писал(а):
IDoNotExist писал(а):Ну и как ты определил что позиция не загружается?

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

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

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

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

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

СообщениеДобавлено: 24 авг 2018, 20:35
SashaNyasha
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);
}

}

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

СообщениеДобавлено: 24 авг 2018, 20:49
1max1
а в каком месте ты делаешь сейв?

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

СообщениеДобавлено: 24 авг 2018, 21:44
SashaNyasha
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);
}

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

СообщениеДобавлено: 15 ноя 2018, 23:14
Heliosis
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.: и да, мне все равно, что прошло уже несколько месяцев -. -