Noticias

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

Nueva duda tonta, esta vez con imagen que hago servir de menu

Iniciado por Tizon, Marzo 06, 2016, 01:45:02 PM

Tema anterior - Siguiente tema
Hola, siento si se ha preguntado miles de veces, lo cierto es que he buscado y no he encontrado, así que nuevamente recurro a vuestra ayuda,En tema es lo siguiente, creo una pantalla de menú con una imagen y unos botones que dependen de la imagen. Al pulsar determinado botón, a de activarse otra imagen que tiene otra serie de botones dependientes. Hasta aquí, bien, pero al tratar de activar la imagen con image,enabled = true, ni caso. Copio el código entero por si afecta alguna otra parte o descuido algo.using UnityEngine;
using System.Collections;
using UnityEngine.UI;public class ClsDirectorDeMenus : MonoBehaviour {    public int opcion;    public Image panelImagenSelector;
    public Image panelImagenPlaneta;    public void botonPulsado(int boton)
    {
        switch (boton)
        {
            case 1:
                if(opcion == 0)
                {
                    opcion = 1;
                    panelImagenPlaneta.enabled = true;
                }
                break;
        }
    }
}Nuevamente, muchas gracias a todos.


Exacto, enable desactiva el Update() y este tipo de funciones del MonoBehaviour, setactive el objeto entero y los hijos.

[quote author=juanma_teso" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35336" data-ipsquote-contentcommentid="127910 date=1457274318]Exacto, enable desactiva el Update() y este tipo de funciones del MonoBehaviour, setactive el objeto entero y los hijos.[/quote]Gracias a ambos por la respuesta. El caso es que cuando lo tecleo no me aparece entre la lista de opciones, y cuando lo meto a mano me da error. Acaso me falta algo?using UnityEngine;
using System.Collections;
using UnityEngine.UI;public class ClsDirectorDeMenus : MonoBehaviour {    public int opcion;    public Image panelImagenSelector;
    public Image panelImagenPlaneta;    public void botonPulsado(int boton)
    {
        switch (boton)
        {
            case 1:
                if(opcion == 0)
                {
                    opcion = 1;
                    panelImagenPlaneta.SetActive(true);
                }
                break;
        }
    }
}Me suelta el siguiente error:Assets/PROYECTO/SCRIPTS/ClsDirectorDeMenus.cs(20,40): error CS1061: Type `UnityEngine.UI.Image' does not contain a definition for `SetActive' and no extension method `SetActive' of type `UnityEngine.UI.Image' could be found (are you missing a using directive or an assembly reference?)Alguna idea? Muchas gracias.

En lugar de aplicarle el SetActive a un componente Text se lo tendrías que aplicar al gameobject donde se encuentra dicho componente.

[quote author=Trunex" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35336" data-ipsquote-contentcommentid="127919">En lugar de aplicarle el SetActive a un componente Text se lo tendrías que aplicar al gameobject donde se encuentra dicho componente.[/quote]Gracias por la respuesta, lo he probado. using UnityEngine;
using System.Collections;
using UnityEngine.UI;public class ClsDirectorDeMenus : MonoBehaviour {    public int opcion;    public GameObject panelImagenSelector;
    public GameObject panelImagenPlaneta;    public void botonPulsado(int boton)
    {
        switch (boton)
        {
            case 1:
                if(opcion == 0)
                {
                    opcion = 1;
                    panelImagenPlaneta.SetActive(true);
                }
                break;
        }
    }
}En el inspector lo que hago es arrastrar la imagen desde la gerarquía al public GameObject panelImagenSelector y public GameObject panelImagenPlaneta. Es correcto, no? también he probado a crear un GameObject vacio y hacer depender el Image a él, y y por el mismo método vincular a las variables publicas los gameObject contenedores, pero tampoco funciona.

Sigues sin aplicarle el setActive al gameobject. 'panelImagenPlaneta.gameObject.SetActive(true);'

Al final lo he conseguido, que nadie me pregunte como... Añadí una función Start en la que desactivaba el panel, y si funcionaba. Pero no conseguía activar, así que he vuelto a rehacerlo todo y me ha funcionado. No me ha hecho falta crear gameObjects vacíos. He empezado con la función Start desactivando, comprobando que funciona y a partir de ahí he asignado otros valores a la pulsación de botón, queda más sucio, pero funciona. Supongo que como me volví haciendo pruebas y más pruebas antes de pedir ayuda, al final lié un pitosfio por algún lado. Copio el código final por si a alguien le sirve.using UnityEngine;
using System.Collections;
using UnityEngine.UI;public class ClsDirectorDeMenus : MonoBehaviour {    public int opcion;    public GameObject panelImagenSelector;
    public GameObject panelImagenPlaneta;    void Start()
    {
        if (opcion == 0)
        {
            opcion = 2;
            panelImagenPlaneta.SetActive(false);
        }
    }    public void botonPulsado(int boton)
    {
        switch (boton)
        {
            case 1:
                if(opcion == 2)
                {
                    opcion = 1;
                    panelImagenPlaneta.SetActive(true);
                }
                break;
        }
    }
}Nuevamente muchas gracias a todos por vuestra ayuda!!! Sin vosotros seguramente seguiría loco haciendo pruebas y liandolo cada vez más!!!
[quote author=juanma_teso" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35336" data-ipsquote-contentcommentid="127925">Sigues sin aplicarle el setActive al gameobject. 'panelImagenPlaneta.gameObject.SetActive(true);'[/quote]Gracias por la respuesta. Ya lo he resuelto. En la declaración lo hago como public GameObject panelImagenPlaneta; Imagino que al hacerlo así, al arrastrar la imagen me coge el gameObject directamente. El caso es que me funciona, pero si es por chiripa y estoy equivocado y lo estoy haciendo mal por favor, corrígeme. Prefiero aprender y corregir errores. Algunos conceptos aún me cuestan y si los fijo mal, aunque ahora en esto me funcione, en otras cosas no lo harán y me volveré loco tratando de entender.

Si esta bien si es un Gameobject tal cual, si puedes acceder directamente a su propiedad SetActive...en el caso anterior que solo estabas jalando Image, la clase Image no tiene esa propiedad por eso tendrias que acceder al gameobject de la imagen, a como te decian
[quote author=juanma_teso" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35336" data-ipsquote-contentcommentid="127925" style="box-sizing: border-box; padding-top: 35px; padding-right: 0px; padding-left: 15px; color: rgb(89, 89, 89); background-color: rgb(251, 251, 251);">panelImagenPlaneta.gameObject.SetActive(true);' [/quote]Entonces para cualquier componente que tenga un Gameobject el querer apagarlo o prenderlo  seria asi usando enabled, en el caso si aun fuera una Imagen PanelImagenPlaneta    panelImagenPlaneta.enabled = true; saludos

te adjunto un codigo rapido que hice para ti. using UnityEngine;
using System.Collections;public class OpenCloseMenu : MonoBehaviour {    public GameObject desactivar;
    public GameObject activar;
        void OnMouseDown(){
        activar.SetActive (true);
        desactivar.SetActive (false);    }
} asigna este código a cada imagen, también agrégale un collider como tag. luego agregas el objeto que queres activar y cual queres que se desactive al hacer click en la imagen. ej:haces click en la imagen 1, y se activa la 2, asi mismo la 1 se desactiva. es buen codigo para crear menu (es asi como lo utilizo) saludosss

[quote author=gonzalitosk8" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35336" data-ipsquote-contentcommentid="128083 date=1457711780]te adjunto un codigo rapido que hice para ti. using UnityEngine;
using System.Collections;public class OpenCloseMenu : MonoBehaviour {    public GameObject desactivar;
    public GameObject activar;
        void OnMouseDown(){
        activar.SetActive (true);
        desactivar.SetActive (false);    }
} asigna este código a cada imagen, también agrégale un collider como tag. luego agregas el objeto que queres activar y cual queres que se desactive al hacer click en la imagen. ej:haces click en la imagen 1, y se activa la 2, asi mismo la 1 se desactiva. es buen codigo para crear menu (es asi como lo utilizo) saludosss[/quote]fantástico. Lo pruebo. Muchas gracias también!!!

Etiquetas: