Noticias

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

Activar Componente Al Pasar De escena

Iniciado por Alex, Abril 18, 2018, 03:46:29 AM

Tema anterior - Siguiente tema
Hola! estaba buscando información sobre como activar un script o otro componente al pasar de escena, osea si estoy en la escena1  el script esta desactivado, pero si paso a la escena2 es script se activa, alguien me dice como puedo hacer eso?
 
Psdta: (el gameobject tiene el dont destroy on load)

Podrías hacer lo siguiente -
 

public class ActiveObject : MonoBehaviour
{
private void Awake()
{
   FindObjectOfType<Componente>().SetActive(true);
}
}

 
 

Abril 18, 2018, 04:58:13 PM #2 Ultima modificación: Abril 18, 2018, 06:37:03 PM por BAMF
Cita de: francoe1 date=1524031214Podrías hacer lo siguiente -
   
   

public class ActiveObject : MonoBehaviour
{
private void Awake()
{
   FindObjectOfType<Componente>().SetActive(true);
}
}

   
       
   


No pasa nada, es objeto sigue inactivo, he probado con esto:
 


   

public class ActivarObjeto : MonoBehaviour {
void OnLevelWasLoaded(int level)
    {
        if(level == 0)
        GetComponent<Fire>().gameObject.SetActive(false);
 
        string levelName = Application.loadedLevelName;
 
        if (levelName == "Juego")
 
        GetComponent<Fire>().gameObject.SetActive(true);
    }
}



   pero es igual, no pasa nada.

Cita de: Alex date=1524063493if(level == 0)         GetComponent<Fire>().gameObject.SetActive(false);           string levelName = Application.loadedLevelName;           if (levelName == "Juego")           GetComponent<Fire>().gameObject.SetActive(true);
   


dos cosas:
 
1 - estás mezclando niveles por index y por nombre, solo tené cuidado, si Fire fuera el nivel con index 0 te estás metiendo en ambos if's (que la verdad no se si los pusiste bien así como están si llaves), y no estás usando else's en ningun lado (te alcanza con que se meta en un solo if, no hay necesidad de seguir evaluando condiciones...supongo)
 
2 - Estás buscando el componente (Fire) pero luego estás metiendote en el "gameObject" y activando el gameObject, no Fire, si querés modificar Fire usá ".enable = true/false"
 
https://docs.unity3d.com/ScriptReference/Behaviour-enabled.html
 

GetComponent<Fire>().enabled = true;

 
 

A ver.. vos tenes muchas escenas, en donde necesitas que un componente "Singleton" se active o desactive ... 
 
Entonces, primero deberías de hacer tu componente Fire un Singleton.
 

public class Fire : MonoBehaviour
{
     private statin Fire _instance {get;Set;}
     public static Fire Singleton {
      get{
        if(_instance == null)
          _instance = FindObjectOfType<Fire>();
        if(_instance == null)
          _instance = new GameObject("_FIRE").AddComponent<Fire>();
        return _instance;
      }
    }
}

 
luego crear un gameObject con el siguiente componente en cada escena...
 

public class ActiveFireComponent : MonoBehaviour
{
     public bool Active;
 
private void Awake()
{
   FindObjectOfType<ActiveFireComponent >().SetActive(Active);
}
}

 
---- No es la manera mas limpia de hacerlo ... pero debido a que no conozco la estructura del proyecto creo que sería las más facil de implementar 

Etiquetas: