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);
}
}
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 (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