Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Variable única, múltiples GO

Iniciado por farenhai, Febrero 03, 2016, 04:11:53 PM

Tema anterior - Siguiente tema
Febrero 03, 2016, 04:11:53 PM Ultima modificación: Febrero 03, 2016, 04:12:41 PM por farenhai
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

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  


[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

[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. /monthly_2016_02/1.jpg.53209a6ccc73df3c98b269aaefc44b34.jpg" class="ipsAttachLink ipsAttachLink_image">


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 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

Mira aqui lo tienes hecho de otra forma, echale un vistazo y si tienes dudas las preguntas por aqui.
http://unityspain.com/applications/core/interface/file/attachment.php?id=9172">compra.rar

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!  

Etiquetas: