Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: farenhai en Febrero 03, 2016, 04:11:53 PM

Título: Variable única, múltiples GO
Publicado por: farenhai en Febrero 03, 2016, 04:11:53 PM
Buenas!pregunta tonta de novato: Intento crear un menú sencillo de compra de objetos. El objetivo es evitar que se compre el mismo objeto dos veces (error, accidente).De esta manera, había pensado en hacer un bool que, simplemente, se activara "True" cuando el objeto había sido comprado.El problema es que, claro, la variable es única y se pondrá "True" con independencia del objeto que esté comprando, en lugar de utilizar la misma variable con valor independiente para cada objeto.¿Qué puedo hacer? Imagino que la solución es más que fácil, pero encuentro la manera...  Adjunto archivos del proyecto (es proyecto de prueba, con sólo dos scripts y tres botones) para que podáis verlo cómodamente. ¡Gracias!menu compra_prueba.7z
Título: Variable única, múltiples GO
Publicado por: ACarranza en Febrero 03, 2016, 08:28:49 PM
yo lo que haria, tendria un script generico para cada items, con el booleano que dices, entonces al comprobar el booleando del script del item, pues ya es interno no interfiere con los otros  
Título: Variable única, múltiples GO
Publicado por: leocub58 en Febrero 03, 2016, 08:33:43 PM
Hazlo con playerprefs.
Título: Variable única, múltiples GO
Publicado por: ACarranza en Febrero 03, 2016, 08:50:13 PM
[quote author=leocub58" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35074" data-ipsquote-contentcommentid="126775 date=1454528023]Hazlo con playerprefs.[/quote]no lo creo adecuado, si estamos hablando de un inventario, quiere decir que habra una n cantidad de items no se va a poner a guardar cada item un una variable diferente, seria lo mismo que dice que tiene, ahorita su problema no esta en el guardado de datos, si no en su logica de mostrar los items y como controlar cual se vendio y cual no. almenos es lo que me da a entender... jejej xD
Título: Variable única, múltiples GO
Publicado por: farenhai en Febrero 04, 2016, 11:33:22 AM
[quote author=ACarranza date=1454529013" data-ipsquote="" data-cite="ACarranza" class="ipsQuote">no lo creo adecuado, si estamos hablando de un inventario, quiere decir que habra una n cantidad de items no se va a poner a guardar cada item un una variable diferente, seria lo mismo que dice que tiene, ahorita su problema no esta en el guardado de datos, si no en su logica de mostrar los items y como controlar cual se vendio y cual no. almenos es lo que me da a entender... jejej xD[/quote]Efectivamente, es lo que trato de hacer. El problema está en que al hacer "True" la variable, siempre me hace la del Objeto 1 con independencia del objeto que esté presionando. Os explico con más detallle. Éste es el script de marras ("control.cs"): using UnityEngine;
using System.Collections;public class control : MonoBehaviour {    public GameObject confirmacion;
    public static int money = 50;    [HideInInspector]
    public int precio;    GameObject objeto;
    public bool compraRealizada = false;
    // Use this for initialization
    void Start () {    }
    
    // Update is called once per frame
    void Update () {
    
    }    public void Comprar ()
    {
    confirmacion.SetActive(true);
    }    public void Yes ()
    {
        if (compraRealizada == true)
        {
            Debug.Log ("Ya has comprado este articulo");
            confirmacion.SetActive(false);
        }        if (compraRealizada == false && money == 0)
        {
            Debug.Log ("no tienes fondos!");
            confirmacion.SetActive(false);
            return;
        }
        if (compraRealizada == false && money >= 0)
        {
            Debug.Log ("Compra realizada");
            confirmacion.SetActive(false);
            money=money - precio;
        }
        compraRealizada = true;
//        Debug.Log (compraRealizada);        
    }    public void No ()
    {
        confirmacion.SetActive(false);
    }
} El caso es que se me activa siempre la variable bool (compraRealizada) del "objeto 1" aunque cliquee en el "objeto 2". Los botones añadidos son independientes (no copypaste, ni siquiera clones). Es por lo que entiendo que lo que sucede es que Unity percibe "compraRealizada" como una única variable general a la cual llama cualquiera de los botones (objetos) accionados... igual el diagnóstico es errado, pero creo que tiene sentido. La pregunta es, ¿cómo hago para que Unity entienda que es un booleano que debe comprobar a nivel interno del script y no como una variable general? Es que no he entendido bien la respuesta sugerida, ACarranza. (//Smileys/invision/default_blush.png%5D%C2%A1Gracias,%20en%20cualquier%20caso,%20a%20los%20dos%20por%20vuestras%20r%C3%A1pidas%20respuestas!%3Ca%20href=)/monthly_2016_02/1.jpg.53209a6ccc73df3c98b269aaefc44b34.jpg" class="ipsAttachLink ipsAttachLink_image">
 (//<fileStore.core_Attachment>/monthly_2016_02/2.jpg.69de67df9a87b845a521cf9b476d1e3e.jpg)
 (//<fileStore.core_Attachment>/monthly_2016_02/3.jpg.5c8b57742ac9c116c80b81e347caf598.jpg)
Título: Variable única, múltiples GO
Publicado por: rupas en Febrero 04, 2016, 01:36:29 PM
Es evidente lo que te esta pasando, en la ventana de confirmación cuando pulsas Si siempre estas llamando al script Control que tiene el Objeto1, por lo tanto siempre lo estas cambiando del mismo objeto.
Título: Variable única, múltiples GO
Publicado por: farenhai en Febrero 04, 2016, 02:15:41 PM
[quote author=rupas date=1454589389" data-ipsquote="" data-cite="rupas" class="ipsQuote">Es evidente lo que te esta pasando, en la ventana de confirmación cuando pulsas Si siempre estas llamando al script Control que tiene el Objeto1, por lo tanto siempre lo estas cambiando del mismo objeto.[/quote]¡Leches! No me había dado cuenta... :D Título: Variable única, múltiples GO
Publicado por: rupas en Febrero 04, 2016, 02:41:53 PM
Mira aqui lo tienes hecho de otra forma, echale un vistazo y si tienes dudas las preguntas por aqui.
compra.rar
Título: Variable única, múltiples GO
Publicado por: farenhai en Febrero 04, 2016, 06:24:42 PM
wow, muchas gracias, Rupas!!Después de tu observación, reorganicé todo un poco (sin tocar el script) y conseguí que el prefab funcionara como era de esperar...De todas formas, veo cómo has hecho el script y me gusta bastante más (mi solución pasó por integrar el GO de Confirmación en el prefab) porque entiendo que es más eficiente... y creo que de aquí puedo aprender un par de cosas muy buenas...¡Muchas gracias por el aporte y tu tiempo!