Uma ajuda com esse script, por favor
2 participantes
Página 1 de 1
Uma ajuda com esse script, por favor
Bom dia, estou tentando aprimorar esse script para salvar a posição do personagem na cena. O script já salva a cena, mas eu gostaria de salvar também a posição do personagem. Se alguém puder me indicar o que fazer ficarei grato. Tetei fazer por mim mesmo seguindo tutoriais, mas não funcionou. O problema é justamente salvar a posição do personagem.
- Código:
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class PauseScript : MonoBehaviour
{
public float x,y,z;
public GameObject FPSController;
public GameObject FPSControllerPausa;
public GameObject MusicManager;
GameObject PauseMenu;
bool paused;
bool muted;
[SerializeField]
Text mutetext;
void Start()
{
paused = false;
PauseMenu = GameObject.Find("PauseMenu");
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Escape))
{
paused = !paused;
}
if (paused)
{
FPSControllerPausa.SetActive(true);
FPSController.SetActive(false);
PauseMenu.SetActive(true);
Time.timeScale = 0;
}
else if (!paused)
{
FPSControllerPausa.SetActive(false);
FPSController.SetActive(true);
PauseMenu.SetActive(false);
Time.timeScale = 1;
}
if (muted)
{
MusicManager.SetActive(false);
mutetext.text = "Unmute";
}
else if (!muted)
{
MusicManager.SetActive(true);
mutetext.text = "Mute";
}
}
public void Resume()
{
paused = false;
}
public void MainMenu()
{
Application.LoadLevel(0);
}
public void Save()
{
x = transform.position.x;
y = transform.position.y;
z = transform.position.z;
PlayerPrefs.SetInt("currentscenesave", Application.loadedLevel);
PlayerPrefs.SetFloat("x", x);
PlayerPrefs.SetFloat("y", y);
PlayerPrefs.SetFloat("z", z);
}
public void Load()
{
x = PlayerPrefs.GetFloat("x");
y = PlayerPrefs.GetFloat("y");
z = PlayerPrefs.GetFloat("z");
Application.LoadLevel(PlayerPrefs.GetInt("currentscenesave"));
Vector3 LoadPosition = new Vector3(x,y,z);
transform.position = LoadPosition;
}
public void Mute()
{
muted = !muted;
}
public void Quit()
{
Application.Quit();
}
}
Re: Uma ajuda com esse script, por favor
Primeiro, você não tá chamando o Load() aí, tá chamando ele pela UI pelo menos?
O problema é que você carrega a posição x, y e z, Chama a cena que leva um tempo pra carregar e logo após já muda a posição do personagem, só que essa mudança de posição ocorre na cena que você tá saindo, e quando inicia a cena nova, esse script com a posição já não existe mais.
A forma mais simples de resolver isso seria você salvar no playerprefs algum valor pra indicar que você tá tentando carregar o save, tipo:
playerprefs > carregando = 1;
Chama cena nova.
Na start da cena nova > player prefs> carregando é igual a 1? se sim, carrega a posição> salva 0 no carregando.
se não, faz o loading normal sem carregar a posição.
O problema é que você carrega a posição x, y e z, Chama a cena que leva um tempo pra carregar e logo após já muda a posição do personagem, só que essa mudança de posição ocorre na cena que você tá saindo, e quando inicia a cena nova, esse script com a posição já não existe mais.
A forma mais simples de resolver isso seria você salvar no playerprefs algum valor pra indicar que você tá tentando carregar o save, tipo:
playerprefs > carregando = 1;
Chama cena nova.
Na start da cena nova > player prefs> carregando é igual a 1? se sim, carrega a posição> salva 0 no carregando.
se não, faz o loading normal sem carregar a posição.
- Código:
using UnityEngine;
using UnityEngine.SceneManagement;
public class PauseScript : MonoBehaviour
{
private void Start()
{
ChecarJogoSalvo();
}
public void Load()
{
PlayerPrefs.SetInt("carregando", 1); //Salvando 1 digo que na proxima cena quero carregar a posição do personagem
PlayerPrefs.Save();
SceneManager.LoadScene(PlayerPrefs.GetInt("currentscenesave"));
}
private void ChecarJogoSalvo()
{
if (PlayerPrefs.GetInt("carregando") == 1)
{
//Essa cena foi chamada pelo sistema de carregamento, então carrego os dados.
float x = PlayerPrefs.GetFloat("x");
float y = PlayerPrefs.GetFloat("y");
float z = PlayerPrefs.GetFloat("z");
Vector3 posicaoSalva = new Vector3(x, y, z);
//Aplica a posição no player
PlayerPrefs.SetInt("carregando", 0); //Deixo o valor como zero pra não influenciar nas proximas cenas
PlayerPrefs.Save();
}
}
}
SteveRogers- Instrutor
- PONTOS : 2665
REPUTAÇÃO : 156
Respeito as regras :
Re: Uma ajuda com esse script, por favor
Eu sou muito principiante em c#, bom, esse mesmo script é usado no menu principal, de lá eu posso clicar em carregar e continuar da cena onde salvei pela última vez. Achei que poderia haver uma certa hierarquia, então deixei a função de salvar a posição antes de salvar a cena, se é que não está tudo errado. Na cena há um menu de pausa com o mesmo script, tem as funções no UI de salvar e carregar, mas ao salvar num determinado ponto do cenário e em seguida carregar, a cena é simplesmente carregada novamente com o personagem em sua posição inicial. Desculpa se não respondi tudo se perguntou corretamente.
Re: Uma ajuda com esse script, por favor
Acabei "optando" por deixar dois tipos de save no menu; um que salva a cena e outro que salva a posição do personagem.
Tópicos semelhantes
» [AJUDA]Quero Ajuda poque esse script so da erro!
» Ajuda Por Favor! Script Errado
» Por Favor preciso de Ajuda com um Simples Script C#.
» Erro no script no jogo aqui, Ajuda, por favor!
» Alguém me ajuda com esse script ?
» Ajuda Por Favor! Script Errado
» Por Favor preciso de Ajuda com um Simples Script C#.
» Erro no script no jogo aqui, Ajuda, por favor!
» Alguém me ajuda com esse script ?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos