Jump to content
UnitySpain

Auronity

Fosiles
  • Content Count

    39
  • Joined

  • Last visited

  • Days Won

    1

Auronity last won the day on October 22 2017

Auronity had the most liked content!

Community Reputation

3 Neutral

About Auronity

  • Rank
    Usuario

Profile Information

  • Especialidad
    Diseñador

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Solucionado, gracias por la ayuda. El caso es que cuando le asignaba la posición así: baraja .transform.position.x = -5 + (i / 2f); me daba un error, pero usando un Vector3 funciona perfecto Gracias.
  2. Nuevo error, ya se crean todas las cartas fuera de la pantalla, y he creado otro método para colocarlas en la pantalla de forma que cada carta este ligeramente desplazada de la anterior. Ahí esta el problema, no lo hace. Se quedan donde se crean originalmente fuera de la pantalla. Adjunto el script: using System.Collections; using System.Collections.Generic; using UnityEngine; public class Controlador : MonoBehaviour { public GameObject cartaPrefab; List<GameObject> baraja; // Use this for initialization void Start () { baraja = new List<GameObject> (); crearCartas (); colocarCartas (); } // Update is called once per frame void Update () { } void crearCartas(){ GameObject carta; //Oros for(int i=1; i<=12; i++){ carta = Instantiate (cartaPrefab, new Vector2(-10, 0), Quaternion.identity) as GameObject; carta.name = i + " de Oros"; carta.GetComponent<GestorCartas> ().spr = Resources.Load<Sprite> ("Cartas/Oros/" + i); carta.GetComponent<GestorCartas> ().numero = i; carta.GetComponent<GestorCartas> ().palo = "Oros"; baraja.Add (carta); } //Copas for(int i=1; i<=12; i++){ carta = Instantiate (cartaPrefab, new Vector2(-10, 0), Quaternion.identity) as GameObject; carta.name = i + " de Copas"; carta.GetComponent<GestorCartas> ().spr = Resources.Load<Sprite> ("Cartas/Copas/" + i); carta.GetComponent<GestorCartas> ().numero = i; carta.GetComponent<GestorCartas> ().palo = "Copas"; baraja.Add (carta); } //Espadas for(int i=1; i<=12; i++){ carta = Instantiate (cartaPrefab, new Vector2(-10, 0), Quaternion.identity) as GameObject; carta.name = i + " de Espadas"; carta.GetComponent<GestorCartas> ().spr = Resources.Load<Sprite> ("Cartas/Espadas/" + i); carta.GetComponent<GestorCartas> ().numero = i; carta.GetComponent<GestorCartas> ().palo = "Espadas"; baraja.Add (carta); } //Bastos for(int i=1; i<=12; i++){ carta = Instantiate (cartaPrefab, new Vector2(-10, 0), Quaternion.identity) as GameObject; carta.name = i + " de Bastos"; carta.GetComponent<GestorCartas> ().spr = Resources.Load<Sprite> ("Cartas/Bastos/" + i); carta.GetComponent<GestorCartas> ().numero = i; carta.GetComponent<GestorCartas> ().palo = "Bastos"; baraja.Add (carta); } /*GameObject random = baraja [Random.Range (0, baraja.Count)]; Debug.Log (random.name + ", " + random.GetComponent<GestorCartas>().numero + ", " + random.GetComponent<GestorCartas>().palo + ", " + random.GetComponent<GestorCartas>().volteada); Debug.Log (baraja.Count);*/ } void colocarCartas () { for (var i = 0; i < baraja.Count; i++) { float posX = baraja [i].transform.position.x; posX = -5 + (i / 2f); Debug.Log (posX + " | " + baraja [i].gameObject.transform.position.x); } } } El debug resultante es: -5 | -10; -45 | -10; -4 | -10...; es decir, el primer numero es la x donde quiero que se coloque cada carta y el -10 es donde se crean y donde siguen estando a pesar de que en el script cambio la posición. Espero que tenga fácil solución Saludos
  3. He encontrado una manera de resolverlo, en lugar de acceder a la variable spr del script de la carta, accedo directamente al componente SpriteRenderer y al sprite. asi si se cambia. Gracias por la ayuda
  4. Hola, he empezado a crear un juego de cartas, el mas básico que se me ha ocurrido, el de la Carta mas Alta. He empezado por crear un prefab con un sprite de "reverso" (boca abajo) de una carta con el que crear la baraja. El caso es que aun no he sido capaz de hacer ni eso. Solo he conseguido que se creen las cartas pero ni se le asigna a cada una su sprite (se quedan boca abajo), ni me deja meter las instancias en la lista "baraja", me da error. Aqui esta el codigo, a ver si alguien ve el problema: using System.Collections; using System.Collections.Generic; using UnityEngine; public class Controlador : MonoBehaviour { public GameObject cartaPrefab; List<GameObject> baraja; // Use this for initialization void Start () { crearCartas (); } // Update is called once per frame void Update () { } public void crearCartas(){ GameObject carta; //Oros for(int i=1; i<=12; i++){ carta = Instantiate (cartaPrefab, new Vector2(0 + i, 0), Quaternion.identity) as GameObject; carta.name = i + " de Oros"; carta.GetComponent<GestorCartas> ().spr = Resources.Load<Sprite> ("Cartas/Oros/" + i); baraja.Add(carta); } } } Saludos. Editado: vale, acabo de solucionar el problema de la lista. me faltaba inicializarla en el Start () (baraja=new List<GameObject>();) Pero sigue sin asignarse los sprites.
  5. Ya he solucionado el error que me salia, pero sigue sin funcionar. He probado a crear un simple GUI.Button para comprobar si es cosa del GUI en general y, exactamente, el boton tampoco aparece. He probado lo de crear un boton en otro script y ahi si funciona, sin problemas. Que puede estar pasando?
  6. Lo he probado pero me da el siguiente error: error CS0120: An object reference is required to access non-static member `UnityEngine.Camera.WorldToScreenPoint(UnityEngine.Vector3)' Editado: acabo de ver la respuesta del Canvas, Lo que he probado es lo anterior
  7. Hola, hace tiempo que tengo esta duda y ha llegado el momento en que necesito saber como hacerlo. Como hago para que se muestre el nombre de un objeto sobre el, y que se mueva con el?
  8. Alguien sabe si hay alguna manera de hacer que unity calcule un angulo de un triangulo imaginario formado por tres puntos dados. Es decir, teniendo un punto A, un punto B y un punto C, como calcular el angulo formado por AC y BC. Saludos.
  9. Ya funciona perfectamente, a falta de un par de detalles que quiero pulir. Incluso se ha solucionado un error que tenia: cuando creaba el .exe en build settings y lo probaba, al cargar, no instanciaba los marcadores, cuando en Unity si lo hacia. Pero ya funciona todo perfectamente Muchas gracias por la ayuda
  10. Perfecto, ya se cargan los marcadores. Solo me queda añadir que se le asigne a cada uno el color y el nombre guardado. Si tengo algun problema ya me pasare por aqui Gracias otra vez.
  11. Eso lo hacia cuando cada marcador se guardaba en un archivo, si en un guardado previo había 6 marcadores y luego reseteo y guardo 3, los 3 que sobran los eliminaba así. Pero ya esa parte no me hace falta. Ahora probare con el código que me has pasado, creo que ya debería funcionar. Gracias
  12. Este es el codigo entero, sigo sin ver el fallo: using UnityEngine; using System.Runtime.Serialization.Formatters.Binary; using System.IO; using System.Collections.Generic; public class SaveLoadM : MonoBehaviour { public GameObject marcadorPrefab; GameObject marcador; //Para la posicion de los marcadores public GameObject[] markerList; [System.Serializable] public class dataPCN { public Vector3 posicion; public int color; public string nombre; public dataPCN (Vector3 posicion, int color, string nombre){ this.posicion = posicion; this.color = color; this.nombre = nombre; } } public class listaDatos { public List<dataPCN> lista = new List<dataPCN> (); } listaDatos lisData = new listaDatos(); void Update () { // Guarda la info al archivo "data" y la envía a la consola if (Input.GetKeyDown (KeyCode.S)) { //Eliminar datos existentes / Resetea la carpeta if (Directory.Exists (Application.persistentDataPath + "/MarkerData/")) { Directory.Delete (Application.persistentDataPath + "/MarkerData/", true); Directory.CreateDirectory (Application.persistentDataPath + "/MarkerData/"); } else { Directory.CreateDirectory (Application.persistentDataPath + "/MarkerData/"); } markerList = GameObject.FindGameObjectsWithTag ("Marcador"); //Guardar posicion de los Marcadores for(int i=0; i<markerList.Length; i++){ //Renombrar marcadores markerList[i].name="Marcador " + (i+1); //Añadir a la lista lisData.lista.Add(new dataPCN(markerList[i].transform.position, markerList[i].GetComponent<GestorMarcadores>().saveColor, markerList[i].GetComponent<GestorMarcadores>().nuevoNombre)); //print ("guardado en archivo " + position[i].posicion ().ToString ()); } GuardaMarca ("MarkData", lisData); print (lisData.lista.Count + " marcador/es guardados"); } // Carga la info desde el archivo if (Input.GetKeyDown (KeyCode.L)) { var datos = new DirectoryInfo (Application.persistentDataPath + "/MarkerData/"); //Eliminar marcadores posteriores no guardados markerList = GameObject.FindGameObjectsWithTag ("Marcador"); if (datos != null) { for (int i = 0; i < markerList.Length; i++) { Destroy (markerList [i]); } //Cargar posicion de los Marcadores listaDatos lisData = CargaMarca ("MarkData"); //print ("marcadores cargados"); if (lisData == null) { print ("Null"); } else { print ("No null"); /*for(int i=0; i< ; i++){ marcador = Instantiate (marcadorPrefab, lisData[i].posicion, Quaternion.identity) as GameObject; Marcadores.contador += 1; //print ("cargado desde archivo " + position.posicion ().ToString ()); }*/ } } } } //Guardar posicion de los Marcadores void GuardaMarca(string nombreArchivo, listaDatos pcn) { BinaryFormatter bufferData = new BinaryFormatter(); FileStream archivo = File.Create (Application.persistentDataPath + "/MarkerData/" + nombreArchivo); bufferData.Serialize(archivo, JsonUtility.ToJson(pcn)); archivo.Close(); } //Cargar posicion de los Marcadores listaDatos CargaMarca(string nombreArchivo) { if (File.Exists (nombreArchivo)) { BinaryFormatter bufferData = new BinaryFormatter (); FileStream archivo = File.Open (Application.persistentDataPath + "/MarkerData/" + nombreArchivo, FileMode.Open); listaDatos loadedData = JsonUtility.FromJson<listaDatos> ((string)bufferData.Deserialize (archivo)); archivo.Close (); return loadedData; } else { return null; } } } Al cargar siempre devuelve Null.
  13. Vale, otro problema, para variar xD. Cuando cargo los datos me devuelve null. He estado repasando el código y no entiendo como se vuelve a convertir el json string en varios elementos de una lista. ¿No habría que convertir la lista en array antes de guardar o algo asi?. Paso el código por si tengo algo mal: void Update () { . . . // Carga la info desde el archivo if (Input.GetKeyDown (KeyCode.L)) { var datos = new DirectoryInfo (Application.persistentDataPath + "/MarkerData/"); markerList = GameObject.FindGameObjectsWithTag ("Marcador"); //Eliminar marcadores posteriores no guardados if (datos != null) { for (int i = 0; i < markerList.Length; i++) { Destroy (markerList [i]); } //Cargar posicion de los Marcadores lisData = CargaMarca ("MarkerData"); print (lisData.lista.Count + "marcadores cargados"); /* if (lisData == null) { print ("No se encontró el archivo"); } else { print (lisData.lista [0] ); print (lisData.lista [1] ); for(int i=0; i< ; i++){ marcador = Instantiate (marcadorPrefab, lisData[i].posicion, Quaternion.identity) as GameObject; Marcadores.contador += 1; //print ("cargado desde archivo " + position.posicion ().ToString ()); } }*/ } } } //Cargar posicion de los Marcadores listaDatos CargaMarca(string nombreArchivo) { if (File.Exists (nombreArchivo)) { BinaryFormatter bufferData = new BinaryFormatter (); FileStream archivo = File.Open (Application.persistentDataPath + "/MarkerData/" + nombreArchivo, FileMode.Open); listaDatos loadedData = JsonUtility.FromJson<listaDatos> ((string)bufferData.Deserialize (archivo)); archivo.Close (); return loadedData; } else { return null; } } Editado: Justo despues de cargar, el print (linea 81) me da null: NullReferenceException: Object reference not set to an instance of an object SaveLoadM.Update () (at Assets/Scripts/SaveLoadM.cs:81)
  14. Ayer estuve combinando ese codigo con el que ya tenia hasta que funciono, solo acabe la parte de Guardar, ahora estoy con el Cargado. Muchas gracias por la ayuda. El problema estaba basicamente dentro de la clase serializable. Ademas es mucho mejor que se guarde todo en un solo archivo, gracias otra vez. Voy a seguir. Saludos
  15. En ese archivo solo hay una, pero eso fue una prueba de guardar solo el string. En mi anterior respuesta copio el archivo guardando la posicion y con el string y el int en blanco
×
×
  • Create New...