Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: ramunda en Julio 08, 2016, 01:21:23 AM

Título: Activar/Desactivar un Gameobject
Publicado por: ramunda en Julio 08, 2016, 01:21:23 AM
Buenas noches,
 
Tengo una duda y después de mucho buscar recurro a ustedes,
 
Explico:
 
Tengo una escena(la principal), con un menú de niveles, bien , selecciono nivel 1 y la desactivo al cargar la siguiente escena.
 
dicho GameObject lleva un script de DontDestroyOnLoad (this.gameObject); añadido a el para que lo cargue en cada escena y pueda encontrarlo en las posteriores.
 
la desactivo de esta manera:
 

void Update ()
{
   if(nivel1)
   {
      Application.LoadLevel("leñador");
      selectniveles.SetActive(false);
   }

 
Hasta aquí de perlas, el juego empieza y bien.
 
El problema es cuando termino el nivel1 intento activar de nuevo el mencionado GameObject, pero no hay manera.
 
Tengo entendido que Unity no encuentra GO (GameObject) desactivados....
 
He probado:
 



   
      GameObject.Find("selectniveles").SetActive(true);
   

[/quote]
 
y todas las maneras activables, pero nada.
 
No encuentra el GO.....
 
Alguna idea de como activarlo?
 
 
 
Gracias de antemano.
Título: Activar/Desactivar un Gameobject
Publicado por: kaito en Julio 08, 2016, 09:29:13 AM
Esta pregunta ya ha salido varias veces en el foro.
 
 
 
Las funciones de la clase GameObject que realizan búsquedas, es decir: GameObject.Find, GameObject.FindWithTag, etc... no funcionan con GameObjects desactivados.
 
Soluciones:
 
1) La función de búsqueda del componente Transform, como Transform.FindChild Transform.Find, sí que funcionan con GameObjects desactivados. Emparenta dentro de un GameObject vacío los GameObjects que necesites desactivar/activar durante el juego.
 
2) Crear un marcador al GameObject desactivado dentro del script tipo singleton/único con una variable estática:
 

using UnityEngine;
using System.Collections;
public class Menu : MonoBehaviour {
    public static GameObject singleton;
       
void Awake () {
        if (singleton) Destroy(this.gameObject);
        else singleton = this.gameObject;
}

 
Entonces, podrás acceder en todo momento al menú mediante Menu.singleton, esté activado o desactivado.
Título: Activar/Desactivar un Gameobject
Publicado por: ramunda en Julio 08, 2016, 10:09:40 AM
Cita de: kaito date=1467962953Esta pregunta ya ha salido varias veces en el foro.
   
   
       
   
   
      Las funciones de la clase GameObject que realizan búsquedas, es decir: GameObject.Find, GameObject.FindWithTag, etc... no funcionan con GameObjects desactivados.
   
   
      Soluciones:
   
   
      1) La función de búsqueda del componente Transform, como Transform.FindChild, sí que funcionan con GameObjects desactivados. Emparenta dentro de un GameObject vacío los GameObjects que necesites desactivar/activar durante el juego.
   
   
      2) Crear un marcador al GameObject desactivado dentro del script tipo singleton/único con una variable estática:
   
   

using UnityEngine;
using System.Collections;
public class Menu : MonoBehaviour {
    public static GameObject singleton;
       
void Awake () {
        if (singleton) Destroy(this.gameObject);
        else singleton = this.gameObject;
}

   
      Entonces, podrás acceder en todo momento al menú mediante Menu.singleton, esté activado o desactivado.
   


Muchas gracias Kaito por la respuesta, tenía esta posibilidad en mente pero el GameObject es un UI, y si lo pongo dentro de otro Go no se carga en pantalla, bastaría con agregarle un script como he echo con Dontestroy on load?., deberia funcionar?
 
Gracias
 
 
 
 
Título: Activar/Desactivar un Gameobject
Publicado por: kaito en Julio 08, 2016, 06:36:12 PM
Si el GameObject es un UI, entonces ya se encuentra emparentado como mínimo al GameObject del componente Canvas que siempre se encuentra activo, y no necesitas crear un GameObject vacío.
 
Entonces buscas el GameObject del Canvas y buscas el UI desde su componente Transform, sería: GameObject.Find("Canvas").transform.FindChild("UI").gameObject;
Título: Activar/Desactivar un Gameobject
Publicado por: ramunda en Julio 08, 2016, 08:54:29 PM
Cita de: kaito date=1467995772Si el GameObject es un UI, entonces ya se encuentra emparentado como mínimo al GameObject del componente Canvas que siempre se encuentra activo, y no necesitas crear un GameObject vacío.
   
   
      Entonces buscas el GameObject del Canvas y buscas el UI desde su componente Transform, sería: GameObject.Find("Canvas").transform.FindChild("UI").gameObject;
   


Kaito, gracias, gracias por tu tiempo , pro me sigue sin funcionar, y es culpa mía , no me he expresado con claridad seguramente y por eso no me funciona.
 
Voy paso por paso con toda la info:
 
El objeto al que quiero acceder y a sus hijos es:
 
selectniveles, adjunto foto.
 
lleva dos scripts :
 
Dontdestoy on load :
 

using UnityEngine;
using System.Collections;
public class dontdestroy : MonoBehaviour {
// Use this for initialization
void Awake ()
{
   DontDestroyOnLoad (this.gameObject);

}

}

 
y otro que lo serializa tal y como tu me has dicho;
 

using UnityEngine;
using System.Collections;
public class Intro : MonoBehaviour {
public static GameObject singleton;
   void Awake () {
      if (singleton) Destroy(this.gameObject);
      else singleton = this.gameObject;
   }
}

 
Bien , cuando carga esta escena, que lo que hace es darte a elegir un nivel, se va a la escena1 , pero se va desactivada:
 

public GameObject selectniveles;
void Update ()
{
   if (nivel1) {
      Application.LoadLevel ("leñador");
      selectniveles.SetActive (false);
   }

 
bien, hasta aquí,  el level leñador empieza limpio y todo bien.
 
Lo que quiero es, desde la escena leñador , acceder a selectniveles y a sus hijos....pero no hay manera!!
 
he probado lo que me has dicho con el transform...pero nada me sigue diciendo que le objeto no se encuentra.
 
tambien he probado con Info.singleton.selectniveles.SetActive(true) y se activa si, pero desaparece a los 2 segundos.
 
y he probado:
 
Info.singleton.FindChild("nivel2").SetActive(true); y nada de nada.
 
 
 
Algo estoy haciendo mal.....:(
 
 
 
 
 
 
 
 
 
 (//<fileStore.core_Attachment>/monthly_2016_07/objeto.png.fe5006e0c8250d5a261a61600847c9fa.png)
 (//<fileStore.core_Attachment>/monthly_2016_07/inspector.png.596c11db8be47eb3fbd0ce41089d9c18.png)
 (//<fileStore.core_Attachment>/monthly_2016_07/scripts.png.ae9c60ff6c62244bc75d26780f7d9189.png)
Título: Activar/Desactivar un Gameobject
Publicado por: kaito en Julio 09, 2016, 12:09:48 AM



   
      Info.singleton.FindChild("nivel2").SetActive(true); y nada de nada.
   

[/quote]
 
No funciona porque el GameObject padre está desactivado. Para buscar desde el componente Transform necesitas que el GameObject padre este siempre activo, si no es así necesitas crear un GameObject vacio.
 
 
 



   
      Info.singleton.selectniveles.SetActive(true) y se activa si, pero desaparece a los 2 segundos
   

[/quote]
 
??? Eso en principio, debería ser Info.singleton.SetActive(true), ya que el script Intro debe ir en el GameObject 'selectniveles'. Yo lo he testeado en otro script y funciona la activación/desactivación desde otros GameObject.
 
El script donde se encuentra la variable GameObject selectniveles esta incompleto y posiblemente el fallo se encuentre en ese script.
Título: Activar/Desactivar un Gameobject
Publicado por: ramunda en Julio 09, 2016, 12:42:45 AM
Cita de: kaito date=1468015788No funciona porque el GameObject padre está desactivado. Para buscar desde el componente Transform necesitas que el GameObject padre este siempre activo, si no es así necesitas crear un GameObject vacio.
   
   
       
   
   
      ??? Eso en principio, debería ser Info.singleton.SetActive(true), ya que el script Intro debe ir en el GameObject 'selectniveles'. Yo lo he testeado en otro script y funciona la activación/desactivación desde otros GameObject.
   
   
      El script donde se encuentra la variable GameObject selectniveles esta incompleto y posiblemente el fallo se encuentre en ese script.
   


Vale , ya voy entendiendo mas y mas.
 
Ademas se me fue la pinza....Donde llamamos a Info...es Intro...pero da igual no funciona igual.
 
El GameObject padre en este caso como bien ya sabes, es un Ui, si l metes en un GO vacio deja de aparecer en pantalla.....ya lo he probado.
 
Pero si bien dices que el Go padre tiene que estar activo....
 
Si lo activo;
 

Intro.singleton.SetActive(true);

 
y después llamo a los Child.....debería funcionar no?:
 

Intro.singleton.FindChild("nivel2").SetActive(true);

 
pues...no :(
 
Cita de: kaito date=1468015788El script donde se encuentra la variable GameObject selectniveles esta incompleto y posiblemente el fallo se encuentre en ese script.
   


Supongo que te refieres al update donde desactivo el selectniveles, eso es solo un fragmento para que vieras como lo declaraba.
 
el script completo es este:
 

using UnityEngine;
public class selectlevels : MonoBehaviour
{
private bool nivel1 = false;
private bool nivel2 = false;
private bool nivel3 = false;
private bool nivel4 = false;
private bool salir = false;
private bool menu = false;
public GameObject selectniveles;
 
void Update ()
{
   if (nivel1) {
      Application.LoadLevel ("leñador");
      selectniveles.SetActive (false);
   }
   if (nivel2) {
      Application.LoadLevel ("leñadornivel2");
   }
   if (nivel3) {
      Application.LoadLevel ("leñadornivel3");
   }
   if (salir) {
      Application.Quit ();
   }
   if (nivel4) {
      Application.LoadLevel ("leñadornivel4");
   }
   if (menu) {
      Application.LoadLevel ("menu");
   }
}
public void Nivel1()
{
   nivel1 = true;
}
public void Nivel2()
{
   nivel2 = true;
}
public void Nivel3()
{
   nivel3 = true;
}
public void Nivel4()
{
   nivel4 = true;
}
public void salida()
{
   salir = true;
}
public void Menu()
{
   menu = true;
}
}

 
es el sistema que uso para los botones ya que se trata de un juego para móviles.
 
alguna idea de como mantener siempre vivo ese Go, y que se vea en pantalla?, o otra manera de desactivarlo al pasar al nivel de juego.
 
Aux aprecio la ayuda Kaito. ;)
 
 
 
 
 
 
 
 
Título: Activar/Desactivar un Gameobject
Publicado por: kaito en Julio 09, 2016, 08:32:47 AM
Creo que el fallo se encuentra en el script selectlevels, ya que no reinicias las variables bool a false cuando cambias de nivel. Entonces, puede producir un error al quedar una o más variables en true.
 
 
 
Modifica esta parte de código, añadiendo un reinicio a false de la variable bool:
 
 
 

   void Update ()
{
   if (nivel1) {
      nivel1=false;
      Application.LoadLevel ("leñador");
      selectniveles.SetActive (false);
   }
   if (nivel2) {
      nivel2=false;
      Application.LoadLevel ("leñadornivel2");
   }
   if (nivel3) {
      nivel3=false;
      Application.LoadLevel ("leñadornivel3");
   }
   if (salir) {
      //salir=false; //aqui no haria falta
      Application.Quit ();
   }
   if (nivel4) {
      nivel4=false;
      Application.LoadLevel ("leñadornivel4");
   }
   if (menu) {
      menu=false;
      Application.LoadLevel ("menu");
   }
}

 
 
Título: Activar/Desactivar un Gameobject
Publicado por: ramunda en Julio 09, 2016, 10:14:01 AM
Cita de: kaito date=1468045967Creo que el fallo se encuentra en el script selectlevels, ya que no reinicias las variables bool a false cuando cambias de nivel. Entonces, puede producir un error al quedar una o más variables en true.
   
   
       
   
   
      Modifica esta parte de código, añadiendo un reinicio a false de la variable bool:
   
   
       
   
   

   void Update ()
{
   if (nivel1) {
      nivel1=false;
      Application.LoadLevel ("leñador");
      selectniveles.SetActive (false);
   }
   if (nivel2) {
      nivel2=false;
      Application.LoadLevel ("leñadornivel2");
   }
   if (nivel3) {
      nivel3=false;
      Application.LoadLevel ("leñadornivel3");
   }
   if (salir) {
      //salir=false; //aqui no haria falta
      Application.Quit ();
   }
   if (nivel4) {
      nivel4=false;
      Application.LoadLevel ("leñadornivel4");
   }
   if (menu) {
      menu=false;
      Application.LoadLevel ("menu");
   }
}

   
       
   


Si si que es posible , es lógico....
 
El nivel se activa y desactiva bien!!!
 
Eres un genio Kaito.
 
Pero sigue sin encontrar a los hijos ***os :)
 

Intro.singleton.SetActive(true);
Intro.singleton.FindChild("nivel2").SetActive(true);

 
me tira este error:
 

Assets/cuentarboles.cs(39,41): error CS1061: Type `UnityEngine.GameObject' does not contain a definition for `FindChild' and no extension method `FindChild' of type `UnityEngine.GameObject' could be found (are you missing a using directive or an assembly reference?)

 
 
Título: Activar/Desactivar un Gameobject
Publicado por: kaito en Julio 09, 2016, 05:56:00 PM
Intro.singleton devuelve un GameObject, en este caso el GameObject selectniveles.
 
Y la función FindChild es del Componente Transform, y devuelve un Transform.
 
Por lo que tendremos que acceder a la propiedad heredada de Component gameObject.
 
 
 



   
      Entonces sería : Intro.singleton.transform.FindChild("nivel2").gameObject.SetActive(true);
   

[/quote]
 
 
 
Recuerda que si desactivas el GameObject padre Intro, automáticamente desactivas a los hijos/Child, por lo que no es necesario activar/desactivar nivel2.
 
 
Título: Activar/Desactivar un Gameobject
Publicado por: ramunda en Julio 09, 2016, 06:01:17 PM
Cita de: kaito date=1468079760Intro.singleton devuelve un GameObject, en este caso el GameObject selectniveles.
   
   
      Y la función FindChild es del Componente Transform, y devuelve un Transform.
   
   
      Por lo que tendremos que acceder a la propiedad heredada de Component gameObject.
   
   
       
   
   
      Entonces sería : Intro.singleton.transform.FindChild("nivel2").gameObject.SetActive(true);
   
   
       
   
   
      Recuerda que si desactivas el GameObject padre Intro, automáticamente desactivas a los hijos/Child, por lo que no es necesario activar/desactivar nivel2.
   
   
       
   


Totalmente de acuerdo con tigo Kaito, lo que he echo es No Desactivar momentaneamente el GO y asi no desactivar sus hijos.
 
De echo he probado lo que me has dicho.
 



   
      Intro.singleton.transform.FindChild("nivel2").gameObject.SetActive(true);
   

[/quote]
 
i me tira este error:
 



   
      NullReferenceException: Object reference not set to an instance of an object
   

[/quote]
 
Que si no voy mal quiere algo como:
 



   
      Private GameObject Intro;
   

[/quote]
 
Pero si pongo esto siguen los errores...diferentes...
 
 
Título: Activar/Desactivar un Gameobject
Publicado por: kaito en Julio 09, 2016, 06:09:05 PM
Esta vez fue un error mio al pasarte el nombre de la función. La función FindChild no existe, la expresión correcta es Find:
 



   
      Intro.singleton.transform.Find("nivel2").gameObject.SetActive(true);
   

[/quote]
 
 
Título: Activar/Desactivar un Gameobject
Publicado por: ramunda en Julio 09, 2016, 06:14:03 PM
Cita de: kaito date=1468080545Esta vez fue un error mio al pasarte el nombre de la función. La función FindChild no existe, la expresión correcta es Find:
   
   
      Intro.singleton.transform.Find("nivel2").gameObject.SetActive(true);
   


Da un error de Null....;(
 
NullReferenceException: Object reference not set to an instance of an object
 
 
Título: Activar/Desactivar un Gameobject
Publicado por: Braltor en Julio 09, 2016, 06:32:29 PM
lo q hago es una variable publica para el gameobject y lo asigno desde el inspector, asi no importa si se desactiva o no, se puede referenciar... y no cosume tiempo en la busqueda
Título: Activar/Desactivar un Gameobject
Publicado por: ramunda en Julio 09, 2016, 06:38:45 PM
Cita de: Braltor date=1468081949lo q hago es una variable publica para el gameobject y lo asigno desde el inspector, asi no importa si se desactiva o no, se puede referenciar... y no cosume tiempo en la busqueda
   


Gracias Braltor por la respuesta,
 
Quiero entender que lo que me comentas es que cree un public GameObject nivel2, por ejemplo en el GameObject maestro osea en el de el singleton y lo arrastre en el inspector? , teniendo en cuenta que esto pasara en una escena diferente a la que estoy?
 
Porque no puedo crear un Public GameObject y asignarlo en el inspector si esta en otra escena....:(
 
Madre mia me he encontrado con dificultades pero esta me esta quitando el sueño, tiene que haber una manera sencilla de activar un hijo de un GameObject que esta en singleton. :((
 
 
 
 
 
 
Título: Activar/Desactivar un Gameobject
Publicado por: Braltor en Julio 09, 2016, 07:06:33 PM
seria ponerla en un manager al q le haces dontdestroyonload, asi lo tienes en cada escena
Título: Activar/Desactivar un Gameobject
Publicado por: ramunda en Julio 09, 2016, 07:20:28 PM
Cita de: Braltor date=1468083993seria ponerla en un manager al q le haces dontdestroyonload, asi lo tienes en cada escena
   


Vale....voy a probar , un manager supongo que te refieres a un GameObject vacío por ejemplo , allí meter el public y un dont destroy?, voy bien?
 
O te refieres a la escena?, o dios me estoy volviendo loco :(
 
 
 
 
Título: Activar/Desactivar un Gameobject
Publicado por: kaito en Julio 09, 2016, 07:40:48 PM
Bueno, te he creado un ejemplo con el tipo de UI que intentas hacer.
 
Por lo que he visto quieres crear un único Canvas para todo el juego: Menu Inicial, interfaz para nivel1, nivel2, y otras ventanas como inventario o mensajes.
 
Entonces, has hecho al Canvas un GameObject indestructible(DontDestroyOnLoad) al cambiar de escena.
 
Precaución al hacer esto: Emparenta el GameObject EventSystem dentro del Canvas que es indestructible o hazlo también indestructible durante la carga de escena. Si no, se destruirá al cambiar de escena y los eventos de UI no funcionaran.
 
El Canvas permanecerá siempre activo. No es necesario desactivarlo.
 
1) Para hacer funcionar este tipo de UI, solo es necesario activar/desactivar los menús hijo/child del canvas, mediante la función Find del Transform del Canvas.
 
2) Es necesario crear una escena independiente al resto del juego. La he llamado EscenaDeCarga. Aquí solo he creado el Canvas y los diferente menus/ventanas del juego que se encuentran desactivados. A continuación, cargamos la siguiente escena donde se encuentra el menú principal del juego.
 
Solo he necesitado un script para los eventos de la UI. Tampoco he necesitado variables tipo bool:
 

using UnityEngine;
using UnityEngine.SceneManagement;
public class selectlevels : MonoBehaviour
{
   
    void Start()
    {
        DontDestroyOnLoad(this.gameObject);
        this.Menu();
        Debug.Log("Start");
    }
    //Ir a escena Nivel1
    public void Nivel1()
    {
        SceneManager.LoadScene("leñador");        
        this.transform.Find("Nivel1").gameObject.SetActive(true);
        this.transform.Find("Menu").gameObject.SetActive(false);
        Debug.Log("nivel1");
    }
 
    //Salir del juego
    public void salida()
    {
        Debug.Log("Quit");
        Application.Quit();      
    }
    //Ir a escena Menu
    public void Menu()
    {
        SceneManager.LoadScene("Menu");
        this.transform.Find("Nivel1").gameObject.SetActive(false);
        this.transform.Find("Menu").gameObject.SetActive(true);
        Debug.Log("menu");
    }
}

 
Enlace de descarga: http://www.speedyshare.com/TbqXb/guiNiveles.unitypackage (http://www.speedyshare.com/TbqXb/guiNiveles.unitypackage)
 
Como he dicho el GameObject Canvas permanece siempre activo, y los menús hijos del Canvas los voy activando/desactivando mediante búsquedas desde el componente Transform que detecta GameObject desactivados.
Título: Activar/Desactivar un Gameobject
Publicado por: ramunda en Julio 09, 2016, 07:58:46 PM
Cita de: kaito date=1468086048Bueno, te he creado un ejemplo con el tipo de UI que intentas hacer.
   
   
      Por lo que he visto quieres crear un único Canvas para todo el juego: Menu Inicial, interfaz para nivel1, nivel2, y otros ventanas como inventario o mensajes.
   
   
      Entonces, has hecho al Canvas un GameObject indestructible(DontDestroyOnLoad) al cambiar de escena.
   
   
      Precaución al hacer esto: Emparenta el GameObject EventSystem dentro del Canvas que es indestructible o hazlo también indestructible durante la carga de escena. Si no, se destruirá al cambiar de escena y los eventos de UI no funcionaran.
   
   
      El Canvas permanecerá siempre activo. No es necesario desactivarlos.
   
   
      1) Para hacer funcionar este tipo de UI, solo es necesario activar/desactivar los menús hijo/child del canvas, mediante la función Find del Transform del Canvas.
   
   
      2) Es necesario crear una escena independiente al resto del juego. La he llamado EscenaDeCarga. Aquí solo he creado el Canvas y los diferente menus/ventanas del juego que se encuentran desactivados. A continuación, cargamos la siguiente escena donde se encuentra el menú principal del juego.
   
   
      Solo he necesitado un script para los eventos de la UI. Tampoco he necesitado variables tipo bool:
   
   

using UnityEngine;
using UnityEngine.SceneManagement;
public class selectlevels : MonoBehaviour
{
   
    void Start()
    {
        DontDestroyOnLoad(this.gameObject);
        this.Menu();
        Debug.Log("Start");
    }
    //Ir a escena Nivel1
    public void Nivel1()
    {
        SceneManager.LoadScene("leñador");        
        this.transform.Find("Nivel1").gameObject.SetActive(true);
        this.transform.Find("Menu").gameObject.SetActive(false);
        Debug.Log("nivel1");
    }
 
    //Salir del juego
    public void salida()
    {
        Debug.Log("Quit");
        Application.Quit();      
    }
    //Ir a escena Menu
    public void Menu()
    {
        SceneManager.LoadScene("Menu");
        this.transform.Find("Nivel1").gameObject.SetActive(false);
        this.transform.Find("Menu").gameObject.SetActive(true);
        Debug.Log("menu");
    }
}

   
      Enlace de descarga: http://www.speedyshare.com/TbqXb/guiNiveles.unitypackage (http://www.speedyshare.com/TbqXb/guiNiveles.unitypackage)
   
   
      Como he dicho el GameObject Canvas permanece siempre activo, y los menús hijos del Canvas los voy activando/desactivando mediante búsquedas desde el componente Transform que detecta GameObject desactivados.
   


Juer....no se que decir Kaito, te has tomado muchas molestias y es muy de apreciar.
 
Pero voy a ser aguafiestas de nuevo.
 
He bajado el pack y he cargado la escena para emocionado para ver la luz que me has proporcionado.
 
pero al cargarla me tira dos errores:
 



   
       
   
   
      Assets/selectlevels.cs(17,22): error CS0117: `SceneManager' does not contain a definition for `LoadScene'
   
   
      Assets/selectlevels.cs(34,22): error CS0117: `SceneManager' does not contain a definition for `LoadScene'
   
   
      :(
   
   
       
   

[/quote]
 
Ya veo lo que ha pasado.....se ha cargado la escena leñador.....osea la escena principal.
 
Ahora esta vacía....
 
leñador es ahora una empty scene..
 
y el script que tenia de selectlevels...ha sido reemplazado por el tuyo..
 
eso no me preocupa...demasiado lo volveré a crear, he arrancado la escena "escena de carga", deberia parecer algo?, menus algo?
 
Esta vacia....
 
Tiene un Main camera
 
un Directional light
 
y un canvas el cual tiene un script Selecniveles que pide un Go....
 
deduzco que tengo que meter mi select niveles el que quiero que no se destruia.
Título: Activar/Desactivar un Gameobject
Publicado por: kaito en Julio 09, 2016, 09:01:02 PM
Esta vez no ha sido un error entre GetChild y Find. SceneManager.LoadScene existe y es correcto: https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.LoadScene.html (https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.LoadScene.html)
 
 
 
Y las escenas, las tienes que sustituir por las tuyas.
 
 
 
En resumen, era para mostrarte que no es necesario activar/desactivar el Canvas. El Canvas debe estar siempre activo. Y las ventanas UI deben ser GameObject hijos del Canvas.
 
Y ya sabes que GameObject.Find no localiza GameObjects desactivados. Es necesario utilizar la función Find del Transform de un GameObject padre, en este caso el Canvas.
 
Un saludo, y suerte.
Título: Activar/Desactivar un Gameobject
Publicado por: ramunda en Julio 09, 2016, 09:11:16 PM
Cita de: kaito date=1468090862Esta vez no ha sido un error entre GetChild y Find. SceneManager.LoadScene existe y es correcto: https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.LoadScene.html (https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.LoadScene.html)
   
   
       
   
   
      Y las escenas, las tienes que sustituir por las tuyas.
   
   
       
   
   
      En resumen, era para mostrarte que no es necesario activar/desactivar el Canvas. El Canvas debe estar siempre activo. Y las ventanas UI deben ser GameObject hijos del Canvas.
   
   
      Y ya sabes que GameObject.Find no localiza GameObjects desactivados. Es necesario utilizar la función Find del Transform de un GameObject padre, en este caso el Canvas.
   
   
      Un saludo, y suerte.
   


Eres GRANDEEEE,  a partir de esto ya puedo montar el menú a mi gusto o intentarlo jajajjaja, pero si , de esta manera se podra acceder de cualquier parte porque le has puesto el dont destroy.
 
i para llamar a los Go desactivados que tenga el canvas de hijos, solo deberia bastar esto:
 



   
       
   
   
      canvas.transform.Find("nivel2").gameObject.SetActive(true);
   
   
       
   

[/quote]
 
o me quivoco?
 
y por ultimo antes de darte un abrazo virtual enorme!!!
 
en el canvas en el script Selecniveles pide un GameObject"selecniveles" eso se queda vacio? o hay que meter algo hay?
 
De momento ese enorme abrazo virtual y un millon de gracias. A ti y todos los que han participado en este hilo!!!
 
 
 
GRACIAS!!
 
P.D los menús no aparecian porque estaban desactivados...pero como soy lerdo del todo no lo había visto :), ya se ven y perfectos.
 
SOY UN LERDO GAFEEEE
 
He echo exactamente lo que me has explicado:
 
He probado desactivando el GO Menu y llamándolo de otra pantalla:
 

Canvas.transform.Find ("Menu").gameObject.SetActive (true);

 
con el find de el transform tal y como tu me has explicado.
 
y me tira este error!! no lo entiendo!!!
 



   
      error CS0120: An object reference is required to access non-static member `UnityEngine.Component.transform'
   

[/quote]
 
Dios santo ya lo estaba celebrando!
 
Y porque cada vez que toco algo de un script el que sea petan los LoadScene?
 



   
       
   
   
      Assets/selectlevels.cs(17,22): error CS0117: `SceneManager' does not contain a definition for `LoadScene'
   
   
      Assets/selectlevels.cs(34,22): error CS0117: `SceneManager' does not contain a definition for `LoadScene'
   
   
       
   

[/quote]
 
tengo que cerrar unity y abrirlo de nuevo para que se quede bien.
Título: Activar/Desactivar un Gameobject
Publicado por: kaito en Julio 09, 2016, 11:06:08 PM
Lo único que se me ocurre sobre SceneManager, es que te falta especificar el espacio de nombre UnityEngine.SceneManagement.
 

using UnityEngine.SceneManagement;

 
Ya solo queda subir el proyecto al foro. Desde aquí creo que ya no se puede hacer mucho más.
Título: Activar/Desactivar un Gameobject
Publicado por: ramunda en Julio 09, 2016, 11:28:39 PM
Cita de: kaito date=1468098368Lo único que se me ocurre sobre SceneManager, es que te falta especificar el espacio de nombre UnityEngine.SceneManagement.
   
   

using UnityEngine.SceneManagement;

   
      Ya solo queda subir el proyecto al foro. Desde aquí creo que ya no se puede hacer mucho más.
   


Eso esta puesto en el Script que me pasastes esta en la parte de arriba:
 
 
 

using UnityEngine;
using UnityEngine.SceneManagement;
public class selectlevels : MonoBehaviour
{
   
    void Start()
    {
        DontDestroyOnLoad(this.gameObject);
        this.Menu();
        Debug.Log("Start");
    }
    //Ir a escena Nivel1
    public void Nivel1()
    {
        SceneManager.LoadScene("leñador");        
        //this.transform.Find("Nivel1").gameObject.SetActive(true);
        //this.transform.Find("Menu").gameObject.SetActive(false);
        Debug.Log("nivel1");

 
no sera eso que te dije que dentro de el canvas donde esta el script Seleclevels esta vacio?
 
 
 

 
Cita de: ramunda date=1468099719Eso esta puesto en el Script que me pasastes esta en la parte de arriba:
   
   
       
   
   

using UnityEngine;
using UnityEngine.SceneManagement;
public class selectlevels : MonoBehaviour
{
   
    void Start()
    {
        DontDestroyOnLoad(this.gameObject);
        this.Menu();
        Debug.Log("Start");
    }
    //Ir a escena Nivel1
    public void Nivel1()
    {
        SceneManager.LoadScene("leñador");        
        //this.transform.Find("Nivel1").gameObject.SetActive(true);
        //this.transform.Find("Menu").gameObject.SetActive(false);
        Debug.Log("nivel1");

   
      no sera eso que te dije que dentro de el canvas donde esta el script Seleclevels esta vacio?
   
   
       
   
   
      
   


Y veo que tambien dentro de EventSystem hay un apartado vacio:
 
 
 
 (//<fileStore.core_Attachment>/monthly_2016_07/sistem.png.a5204f14370f229f8a39158db5f2e14d.png)
Título: Activar/Desactivar un Gameobject
Publicado por: ramunda en Julio 10, 2016, 12:09:54 AM
Kaito, ya tengo el problema de los errores.
 

using UnityEngine;
using UnityEngine.SceneManagement;
public class selectlevels : MonoBehaviour
{
   
    void Start()
    {
        DontDestroyOnLoad(this.gameObject);
        this.Menu();
        Debug.Log("Start");
    }
    //Ir a escena Nivel1
    public void Nivel1()
    {
        Application.LoadLevel("leñador");        
        this.transform.Find("Nivel1").gameObject.SetActive(true);
        this.transform.Find("Menu").gameObject.SetActive(false);
        Debug.Log("nivel1");
    }

 
Sustituido :
 

SceneManager.LoadScene("leñador");

 
por Application.LoadLevel...de momento no falla , ahora me queda arreglar el canvas que los menus ahora van locos.
 
Pero algo tenemos :)
 
Gracias.
 
Definitivamente ya no falla era eso no mas.
 
Y solo Falta una cosaaaaaaaaaaa y cerramos el post!!!
 

Canvas.transform.Find("Menu").gameObject.SetActive(false);

 
Ya tenemos el GameObject padre = Canvas.
 
Tenemos los hijos= Nivel1 y Menu
 
entonces dime por favor como los desactivooo o activo porque con lo que te he puesto arriba no funciona...
 
Y ahora que lo tenemos al huevo...
 
:)
 
 
 
 
 
 
Título: Activar/Desactivar un Gameobject
Publicado por: pioj en Julio 10, 2016, 09:04:00 AM
¿Qué está ocurriendo aquí? ¿Se  ha resuelto el problema sí o no?
 
Marcad la mejor respuesta y resumid un poco todo si creéis que puede resultar interesante para otros usuarios, por favor, porque el seguimiento de este Topic es un desastre...
Título: Activar/Desactivar un Gameobject
Publicado por: ramunda en Julio 10, 2016, 11:24:39 AM
Cita de: pioj date=1468134240¿Qué está ocurriendo aquí? ¿Se  ha resuelto el problema sí o no?
   
   
      Marcad la mejor respuesta y resumid un poco todo si creéis que puede resultar interesante para otros usuarios, por favor, porque el seguimiento de este Topic es un desastre...
   


El resumen esta echo, Kaito, es el que lo ha resuelto lo marcare como mejor respuesta, solo faltaba lo mas importante pero si queréis cerradlo lo cerramos,solo me faltaba saber lo que pregunte al principio se fue arreglando todo hasta llegar aquí. 
Título: Activar/Desactivar un Gameobject
Publicado por: Arthure en Julio 10, 2016, 12:21:49 PM
Cuando algun usuario abre un hilo para preguntar una cosa en concreto, alguien se la responde y el afectado añade un post diciendo algo parecido a "muchas gracias, era eso ... ahora solo me falta esto que no me funciona", vuelven a responderle acerca de su nuevo problema y el afectado nuevamente añade "muchas gracias, ahora lo que no me funciona es este otro aspecto" ... y asi hasta el infinito (o hasta que el usuario que le ha resuelto 4 o 5 problemas en cadena se cansa).
 
Esa situacion hace que el hilo sea un caos a la hora de seguirlo, imposible marcar "mejor respuesta" debido a que hay varias dudas distintas dentro del mismo hilo (encadenadas una detras de otra que van surgiendo con cada respuesta) y que no facilita en absoluto la busqueda de temas en el foro.
 
En mi opinion, cuando alguien tiene un problema esta muy bien preguntar en el foro con intencion de que alguien le ayude porque para eso esta ... pero cuando recibe una respuesta resolviendole el problema, tendria que tener un minimo de voluntad por resolver o modificar el proyecto propio para que sea compatible con la respuesta recibida; Cuando se hacen 4 o 5 consultas en un mismo dia que son fruto de implementar la solucion recibida respecto a la duda anterior, puede que este muy equivocado, pero a simple vista da la sensacion de que esa voluntad por esforzarse un poquito brilla por su ausencia.
 
Ademas, el administrador deberia añadir un punto en las normas del foro que resumiendo dijese "Un tema, una duda" ... facilitaria mucho a la hora de seguir los temas, marcar mejor respuesta y realizar busquedas dentro del foro. Pero esto solo es un consejo
Título: Activar/Desactivar un Gameobject
Publicado por: ramunda en Julio 10, 2016, 12:56:41 PM
Arthure, entiendo lo que dices y lo respeto, pero en algo discrepo ya que el tema empezó si, pero las siguientes respuestas fueron sobre el mismo tema . mismo hilo y simpre sobre lo expuesto por un experto, y lo que comentas de falta de esfuerzo....no lo discutiré pero si lees todos los posts de este hilo veras que muchos son por intentar solucinarlo por mi cuenta y solo, si según la respuesta expuesta por el experto no funciona sobre la solución presentada.
 
Pido disculpas si he ocasionado molestias o discordias.
 
Si vees uno de mis últimos replies solo pedía la ultima instruccion para cerrar el tema , y lo expuse tal cual.
 
Ya que estaba todo entendido y solucionado.
 
Que no se contesto, pues ya me buscare la vida. 
 
 
 
Se agradece infinitamente.
 
Saludos