Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: 0c0de en Septiembre 16, 2015, 05:15:44 PM

Título: [Ayuda]Como programo una tenda
Publicado por: 0c0de en Septiembre 16, 2015, 05:15:44 PM
Es decir me gustaria crear en mi juego una tienda en la que se puedan comprar diferentes vehiculos como helicopteros avionetas etc pero el problema es que no se como hacerlo osea creo que tendria que usar el PlayerPrefs pero nose como hacer (ya he usado antes playerprefs) bueno el caso es la GUI esta ya desarrollada y los botones en si funcionan es decir si le clickas te sale comprado y ya no los puedes volver a hacer click porque estan desactivados pero cuando vuelvo a la escena principal lo que he comprado no me sale os pongo el script que tengo de la tienda: 
using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class Tienda : MonoBehaviour {
public Transform textoMonedas;
public Button myboton;
public Transform textoHelicoptero;
[HideInInspector] public bool CompradoHeli = false;
public Coins coin;
[HideInInspector] public int valorHelicoptero = 1;
void Start () {


}

// Update is called once per frame
void Update () {
   textoMonedas.GetComponent<TextMesh>().text = coin.valor.ToString();
   coin.SvedMoney ();
}

public void Helicoptero(){

   if (coin.valor >= valorHelicoptero) {
      CompradoHeli = true;
      coin.valor -= valorHelicoptero;
      textoHelicoptero.GetComponent<TextMesh> ().text = "Comprado";
      textoHelicoptero.GetComponent<TextMesh> ().fontSize = 30;
   }

   if (CompradoHeli = true) {
      myboton.enabled = false;
   } else {
      myboton.enabled = true;
   }
}
}
Título: [Ayuda]Como programo una tenda
Publicado por: Jose134 en Septiembre 16, 2015, 07:10:41 PM
Si, tienes que usar PlayerPrefs En el codigo cuando compras el helicoptero añade otra lineaPlayerPrefs.SetInt("Helicoptero", 1);Esto lo que hara es crear una variable accesible mediante el metodo PlayerPrefs.GetInt(string); entonces en el script que tengas para ver lo que tienes comprado añade
if(PlayerPrefs.GetInt("Helicoptero") == 0){
    Debug.Log("El helicoptero esta comprado");
}
Título: [Ayuda]Como programo una tenda
Publicado por: 0c0de en Septiembre 16, 2015, 09:07:53 PM
Muchas gracias jose el concepto funciona lo tendre que modificar pero la idea esta ahi  siempre me hago un lio con playerprefs seran pocas funciones pero me lio yo solo jajaja
Título: [Ayuda]Como programo una tenda
Publicado por: kaito en Septiembre 16, 2015, 09:53:49 PM
PlayerPrefs guarda los datos en el archivo de registro de windows(si utilizas windows).  En lugar de usar el archivo de registro para guardar los datos de un inventario o una tienda utilizaría un Dictionary<string,int>.Un ejemplo práctico de guardar un Dictionary en un archivo de texto: 
using UnityEngine;
using System.Collections.Generic;


public class SaveLoadDictionary : MonoBehaviour {

[System.Serializable]
public class Data{

   public string name;
   public int value;

}

public Data[] Save;
public Data[] Load;

Dictionary<string,int> dictionary;

void Start(){

   this.dictionary = new Dictionary<string, int>();
   foreach(Data data in Save) this.dictionary.Add(data.name,data.value);
   SaveDictionary(this.dictionary,"data.txt");
   this.Load = LoadDictionary("data.txt");
   //foreach(Data data in Load) this.dictionary.Add(data.name,data.value);

}

void SaveDictionary(Dictionary<string,int> dictionary,string file){

   var File = System.IO.File.CreateText(Application.dataPath+"/"+file);
   foreach (var entry in dictionary) File.WriteLine("{0} {1}", entry.Key, entry.Value);
   File.Close(); //Cerrar para liberar archivo

}

Data[] LoadDictionary(string file){

   List<Data> list = new List<Data>();

   string[] lines = System.IO.File.ReadAllLines(Application.dataPath+"/"+file);
   //El archivo se cierra-libera automaticamente

   foreach(string line in lines){

      string[] data = line.Split(' ');
      list.Add(new Data(){name = data[0], value = System.Int32.Parse(data[1])});

   }

   return list.ToArray();

}

}
 
Título: [Ayuda]Como programo una tenda
Publicado por: 0c0de en Septiembre 22, 2015, 08:15:19 PM
Vale todo funciona OK en el pc tienda monedas aviones pero en android no me guarda las monedas es decir es como si no las añadiese a la variable monedas
//Este es el principal el que hace que cuando muera escriba la variable con las monedas recogidas
  public void OnCollisionEnter2D(Collision2D other)
    {
   Reset.gameObject.SetActive(true);
   Ventanilla.gameObject.SetActive (true);
   Music.gameObject.SetActive(true);
   GameOver.gameObject.SetActive(true);
   Instantiate(Explosion, avion.transform.position, avion.transform.rotation);
   Destroy (Explosion, 1f);
   GestorAviones.AvionetaPrincipal.GetComponent<SpriteRenderer> ().enabled = false;
   GestorAviones.Helicoptero.GetComponent<SpriteRenderer> ().enabled = false;
   GestorAviones.NyanCat.GetComponent<SpriteRenderer>().enabled = false;

   if (PlayerPrefs.HasKey ("coins")) {
      PlayerPrefs.SetInt("coins", GetComponent<Coins>().valor);
   }
    }

    public void Die()
    {
   if (PlayerPrefs.HasKey ("coins")) {
      PlayerPrefs.SetInt("coins", GetComponent<Coins>().valor);
   }

   if (PlayerPrefs.HasKey ("highscore")) {
      if (PlayerPrefs.GetInt ("highscore") < GetComponent<PointsScore>().score) {
         PlayerPrefs.SetInt ("highscore", GetComponent<PointsScore>().score);
         PlayerPrefs.Save();
      }
   } else {
      PlayerPrefs.SetInt("highscore", GetComponent<PointsScore>().score);
   }
        Application.LoadLevel(0);
    }
 
//Este es el que se encarga de asignar la variable y cargar las monedas
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class Coins : MonoBehaviour {

public Image coin;
public GameObject textoMonedas;
[HideInInspector]public int valor;
// Use this for initialization
void Start () {
   SvedMoney ();
   coin.gameObject.SetActive (true);
   textoMonedas.GetComponent<TextMesh>().text = valor.ToString();

}

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

}

void OnTriggerEnter2D(Collider2D other){
   if (other.gameObject.tag == "Check" && coin.enabled) {
      coin.gameObject.SetActive(false);
      IncrementarMonedas();
      StartCoroutine(MyMethod());
   }
}

public void IncrementarMonedas(){
   valor = valor+1;
   textoMonedas.GetComponent<TextMesh> ().text = valor.ToString ();
}

public void SvedMoney(){
   if (Application.loadedLevel == 0 || Application.loadedLevel == 1 && PlayerPrefs.HasKey ("coins")) {
      if (PlayerPrefs.HasKey ("coins")) {
         valor = PlayerPrefs.GetInt ("coins");
         textoMonedas.GetComponent<TextMesh> ().text = valor.ToString ();
      }
   }
}

public IEnumerator MyMethod(){
   yield return new WaitForSeconds (1f);
   coin.gameObject.SetActive (true);
}
}