Script para salva o jogo?
2 participantes
Página 1 de 1
Script para salva o jogo?
Estou com esses scripts para salvar o jogo ele so esta funcionando para salvar o local do jogador queria que ele salvasse a Scena e o level que o jogador esta
Esse script cria uma pasta save e grava informaoes do jogo na Unity
Esse e do Jogador
Esse script cria uma pasta save e grava informaoes do jogo na Unity
- Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using System;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using UnityEngine.SceneManagement;
public class GuardarDados : MonoBehaviour {
private PosicaoDoJogador PosPJ; // script posisao Jogador
public string LevelName;
private PlayerStats Pls;// script do level
void Awake () {
LevelName = SceneManager.GetActiveScene ().name;
}
void Start () {
PosPJ = GetComponent<PosicaoDoJogador>();
Pls = GetComponent<PlayerStats>();
}
// Update is called once per frame
void Update () {
if (Input.GetKeyDown ("f2")) {
Guardar();
}
if (Input.GetKeyDown ("f3")) {
Cargar ();
}
}
[Serializable]
class DadosAGuardar
{
// Posicao do jogador //
public float JogadorPosX;
public float JogadorPosY;
public float JogadorPosZ;
//Nome Scena//
public string levelName;
//Level do jogador//
public int LevelAtual;
}
public void Guardar(){
if(!Directory.Exists(Application.dataPath + "/Saves"))
{
//Aqui criamos um save
Directory.CreateDirectory(Application.dataPath + "/Saves");
}
if (Directory.Exists (Application.dataPath + "/Saves")) {
BinaryFormatter bf = new BinaryFormatter ();
FileStream FileStream = new FileStream (Application.dataPath + "/Saves/DatosGuardados.dat", FileMode.Create, FileAccess.Write);
List<DadosAGuardar> newDataCollection = new List<DadosAGuardar> ();
List<DadosAGuardar> newDataCollection2 = new List<DadosAGuardar> ();
DadosAGuardar datos = new DadosAGuardar ();
DadosAGuardar PJPos = new DadosAGuardar ();
PJPos.JogadorPosX = PosPJ.JogadorPosiX;
PJPos.JogadorPosY = PosPJ.JogadorPosiY;
PJPos.JogadorPosZ = PosPJ.JogadorPosiZ;
PJPos.LevelAtual = PlayerStats.Life;
bf.Serialize (FileStream, newDataCollection);
bf.Serialize (FileStream, newDataCollection2);
//
bf.Serialize (FileStream, datos);
bf.Serialize (FileStream, PJPos);
Debug.Log ("Guardado");
FileStream.Close ();
}
}
public void Cargar()
{
//Aqui carregamos
if (File.Exists(Application.dataPath + "/Saves/DatosGuardados.dat")) {
BinaryFormatter bf = new BinaryFormatter ();
FileStream FileStream = File.Open(Application.dataPath + "/Saves/DatosGuardados.dat", FileMode.Open);
List<DadosAGuardar> newData1 = (List<DadosAGuardar>)bf.Deserialize (FileStream);
List<DadosAGuardar> newData2 = (List<DadosAGuardar>)bf.Deserialize (FileStream);
DadosAGuardar datos = (DadosAGuardar)bf.Deserialize(FileStream);
DadosAGuardar PJPos = (DadosAGuardar)bf.Deserialize(FileStream);
Debug.Log ("Cargado");
FileStream.Close ();
Transform Jogador;
Jogador = GameObject.Find(PosPJ.NomeDoJogador).transform;
PosPJ.JogadorPosiX = PJPos.JogadorPosX;
PosPJ.JogadorPosiY = PJPos.JogadorPosY;
PosPJ.JogadorPosiZ = PJPos.JogadorPosZ;
PosPJ.LevelName = PJPos.levelName;
PlayerStats.Life = PJPos.LevelAtual;
Jogador.transform.position = new Vector3 (PJPos.JogadorPosX,PJPos.JogadorPosY,PJPos.JogadorPosZ);//aqui ele vouta ao local que estava
}
}
}
Esse e do Jogador
- Código:
using UnityEngine;
using System.Collections;
public class PosicaoDoJogador : MonoBehaviour {
public float JogadorPosiX;
public float JogadorPosiY;
public float JogadorPosiZ;
public string NomeDoJogador = "Player";
private Transform Jogador;
public string LevelName;
// Use this for initialization
void Start () {
Jogador = GameObject.Find(NomeDoJogador).transform;
}
// Update is called once per frame
void Update () {
JogadorPosiX = Jogador.transform.position.x;
JogadorPosiY = Jogador.transform.position.y;
JogadorPosiZ = Jogador.transform.position.z;
}
}
Re: Script para salva o jogo?
Você precisa usar o comando a baixo pra pegar o nome da cena atual... ai é só jogar isto em uma string e salvar a string.
No caso já tem isto no script até... Quanto ao nível do jogador, basta usar um PlayerPrefs com algum valor int.
- Código:
string nomeDaCena = SceneManager.GetActiveScene().name;
No caso já tem isto no script até... Quanto ao nível do jogador, basta usar um PlayerPrefs com algum valor int.
Re: Script para salva o jogo?
Obrigado marcos
Modifiquei o script agora esta gravando a Scena e carregando a Scena
Esse e o do Script do Level tentei fazer um salve e load nele para depois fazer no outro mais nao funciona
da uma olhada
Modifiquei o script agora esta gravando a Scena e carregando a Scena
- Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using System;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using UnityEngine.SceneManagement;
public class GuardarDados : MonoBehaviour {
private PosicaoDoJogador PosPJ; // script posisao Jogador
public string LevelName;
private PlayerStats Pls;// script do level
void Awake () {
string LevelName = SceneManager.GetActiveScene ().name; //modifiquei aqui
}
void Start () {
PosPJ = GetComponent<PosicaoDoJogador>();
Pls = GetComponent<PlayerStats>();
}
// Update is called once per frame
void Update () {
if (Input.GetKeyDown ("f2")) {
Guardar();
}
if (Input.GetKeyDown ("f3")) {
Cargar ();
}
}
[Serializable]
class DadosAGuardar
{
// Posicao do jogador //
public float JogadorPosX;
public float JogadorPosY;
public float JogadorPosZ;
//Nome Scena//
public string levelName;
//Level do jogador//
public int LevelAtual;
}
public void Guardar(){
if(!Directory.Exists(Application.dataPath + "/Saves"))
{
//Aqui criamos um save
Directory.CreateDirectory(Application.dataPath + "/Saves");
}
if (Directory.Exists (Application.dataPath + "/Saves")) {
BinaryFormatter bf = new BinaryFormatter ();
FileStream FileStream = new FileStream (Application.dataPath + "/Saves/DatosGuardados.dat", FileMode.Create, FileAccess.Write);
List<DadosAGuardar> newDataCollection = new List<DadosAGuardar> ();
List<DadosAGuardar> newDataCollection2 = new List<DadosAGuardar> ();
DadosAGuardar datos = new DadosAGuardar ();
DadosAGuardar PJPos = new DadosAGuardar ();
PJPos.JogadorPosX = PosPJ.JogadorPosiX;
PJPos.JogadorPosY = PosPJ.JogadorPosiY;
PJPos.JogadorPosZ = PosPJ.JogadorPosiZ;
PJPos.LevelAtual = PlayerStats.Life;
string LevelName = SceneManager.GetActiveScene ().name;//esse tambem
PlayerPrefs.SetString("LevelName", LevelName);//coloquei esse aqui
bf.Serialize (FileStream, newDataCollection);
bf.Serialize (FileStream, newDataCollection2);
//
bf.Serialize (FileStream, datos);
bf.Serialize (FileStream, PJPos);
Debug.Log ("Guardado");
FileStream.Close ();
}
}
public void Cargar()
{
//Aqui carregamos
if (File.Exists(Application.dataPath + "/Saves/DatosGuardados.dat")) {
BinaryFormatter bf = new BinaryFormatter ();
FileStream FileStream = File.Open(Application.dataPath + "/Saves/DatosGuardados.dat", FileMode.Open);
List<DadosAGuardar> newData1 = (List<DadosAGuardar>)bf.Deserialize (FileStream);
List<DadosAGuardar> newData2 = (List<DadosAGuardar>)bf.Deserialize (FileStream);
DadosAGuardar datos = (DadosAGuardar)bf.Deserialize(FileStream);
DadosAGuardar PJPos = (DadosAGuardar)bf.Deserialize(FileStream);
Debug.Log ("Cargado");
FileStream.Close ();
Transform Jogador;
Jogador = GameObject.Find(PosPJ.NomeDoJogador).transform;
PosPJ.JogadorPosiX = PJPos.JogadorPosX;
PosPJ.JogadorPosiY = PJPos.JogadorPosY;
PosPJ.JogadorPosiZ = PJPos.JogadorPosZ;
PosPJ.LevelName = PJPos.levelName;
PlayerStats.Life = PJPos.LevelAtual;
Jogador.transform.position = new Vector3 (PJPos.JogadorPosX,PJPos.JogadorPosY,PJPos.JogadorPosZ);//aqui ele vouta ao local que estava
if (PlayerPrefs.HasKey("LevelName")) {
Application.LoadLevel(PlayerPrefs.GetString ("LevelName"));//e esse tambem
}
}
}
}
Esse e o do Script do Level tentei fazer um salve e load nele para depois fazer no outro mais nao funciona
da uma olhada
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public enum CharacterType{
Guerreiro = 0,
Mago = 1,
Arqueiro = 2,
Alienigena = 3,
Robor = 4
}
public class PlayerStats: MonoBehaviour {
public CharacterType characterType;
public static int Level = 1;
public static int nextLevel;
public static int xp;
public static int xpToLevel;
public static int xpDiff;
private Animator anim;
public string GameOver;
public int LevelAtual;
//Lugar magico da margia ganhando level
public Transform Lugarmagico;
public ParticleSystem GanhouLevel;
public AudioClip SomGanhouLevel;
//Status
public static int Life;
public static int totalLife = 40;
public static int Magic;
public static int totalMagic = 20;
public static int Attack;
public static int Defense;
public static float speed;
//Morte
bool chamouMorte = false;
public MonoBehaviour[] scriptsToDisable;
public float morteTime = 20;
private int atualAttack;
private int atualDefense;
private bool blinkActive;
public float blinkTime;
private float blinkCouter;
public SkinnedMeshRenderer playerRenderer;
public static float gold;
void Start () {
Recalculation();
atualAttack = Attack;
atualDefense = Defense;
anim = GetComponent<Animator> ();
CarregarLevel();
}
// Update is called once per frame
void Update () {
LevelAtual = Level;
nextLevel = Level + 1;
xpToLevel = 50* nextLevel * Level;
if(xp >= xpToLevel){
xpDiff = xp - xpToLevel;
LevelUP();
}
if (Input.GetKeyDown(KeyCode.I)){
AddXp (12);
Debug.Log("Ganhou xp");
}
if (Life <= 0) {
Life = 0;
Cursor.visible = true;
if (chamouMorte == false) {
chamouMorte = true;
anim.SetBool("isMorte",true);
Morrer();
}
}
}
public void Recalculation(){
totalLife = 40 * Level;
totalMagic = 20 * Level;
Attack = 5 * Level;
Defense = 3 * Level;
Life = totalLife;
Magic = totalMagic;
}
public static void AddXp(int newXp){
xp += newXp;
}
public void LevelUP(){
Level ++;
xp = 0 + xpDiff;
Recalculation();
GanhandoLevel();
SalvarLevel();
}
public void Morrer(){
if (scriptsToDisable.Length == 0) {
Debug.Log ("All scripts still Die");
return;
}
foreach ( MonoBehaviour script in scriptsToDisable)
script.enabled = false;
morteTime -= Time.deltaTime;
Application.LoadLevel (GameOver);
}
public void DamageReceived(int damage){
Life -= damage;
blinkActive = true;
blinkCouter = blinkTime;
}
public void GanhandoLevel(){
Instantiate (GanhouLevel, transform.position, transform.rotation);
GetComponent<AudioSource> ().PlayOneShot (SomGanhouLevel);
}
public static void AddGold(int Agold){
gold += Agold;
}
public void ActiveBlinc(){
if(blinkActive){
if(blinkCouter > blinkTime * 0.66f){
playerRenderer.enabled = false;
}
else if (blinkCouter > blinkTime * 0.33f){
playerRenderer.enabled = true;
}else if (blinkCouter > 0){
playerRenderer.enabled = false;
}else{
playerRenderer.enabled = true;
blinkActive = false;
}
blinkCouter -= Time.deltaTime;
}
}
public void SalvarLevel(){//salvar level
PlayerPrefs.SetInt (Level + "LevelCorrent",LevelAtual);
Debug.Log ("LevelSalvo");
}
public void CarregarLevel(){//carregar level
if (PlayerPrefs.HasKey (Level + "LevelCorrent")){
PlayerPrefs.GetInt (Level + "LevelCorrent");
Debug.Log ("Level Carregando");
}
}
}
Re: Script para salva o jogo?
Ele esta funcionando mais voce pode da uma olhada pra ver se eu coloquei alguma coisa de mais que nao precisa?
Eu descubri um jeito de levar informacoes entre Scenas vou postar depois como apredir
obrigado marcos
Boa noite amigos
Eu descubri um jeito de levar informacoes entre Scenas vou postar depois como apredir
obrigado marcos
Boa noite amigos
Tópicos semelhantes
» Script Look Para Jogo Top Down
» [TUTORIAL] Script para jogo FPS Mobile
» [TUTORIAL] Script para medir o FPS do seu JOGO
» (AJUDA) script de câmera para jogo 2d
» script jogo carro para mudRunner bleder
» [TUTORIAL] Script para jogo FPS Mobile
» [TUTORIAL] Script para medir o FPS do seu JOGO
» (AJUDA) script de câmera para jogo 2d
» script jogo carro para mudRunner bleder
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos