Jump to content
UnitySpain
Sign in to follow this  
Alvaro95

¿Unity permite desactivar scripts?

Recommended Posts

¿Mi cuestión es que una vez iniciado el juego, a través de un script puedes desactivar otro script?

Es una duda que tengo que me seria muy útil saber si se puede llegar a hacer.

 

Share this post


Link to post
Share on other sites

Buenas, tampoco logro entender muy bien qué quieres hacer. 

En todo caso un script suele estar asociado a un GO, el evento start se ejecuta una única vez al iniciar y el update en cada frame. 

Para que no "funcione" sería tan simple como que en el update pongas como primera linea un if. 

void Update () {
    if (!entre){
		entre = true; 
		//hago todo lo que tenga que hacer.
	}
}

 

De todos modos si explicas mejor lo que intentas conseguir igual te damos otras ideas, porque es raro eso de "desactivar un script". 

Share this post


Link to post
Share on other sites

puedes desactivar el componente

miObjetoConMiScript.GetComponent<miScript>().enabled = false;

 

Share this post


Link to post
Share on other sites

Buenas, perdon pero no he explique bien.

 

Lo acabo de leer y no quise decir script...

Me refería a ocultar un objeto(modelo 3D en este caso) y a mostrar otro.

 

Es decir, un script que al pulsar una tecla, un gameobject desaparezca y aparezca otro, cambiar el objeto vamos...

Lo primero que pensé era crear un script en el que un gameobject se deshabilitara y de habilitara otro.

Pero tras varias pruebas solo consigo errores.

Edited by Alvaro95

Share this post


Link to post
Share on other sites
7 hours ago, Alvaro95 said:

Buenas, perdon pero no he explique bien.

 

Lo acabo de leer y no quise decir script...

Me refería a ocultar un objeto(modelo 3D en este caso) y a mostrar otro.

 

Es decir, un script que al pulsar una tecla, un gameobject desaparezca y aparezca otro, cambiar el objeto vamos...

Lo primero que pensé era crear un script en el que un gameobject se deshabilitara y de habilitara otro.

Pero tras varias pruebas solo consigo errores.

Si quieres que un modelo deje de renderizarse puedes deshabilitar su componente renderer (normalmente MeshRenderer para objetos 3D)

gameObject.GetComponent<MeshRenderer>().enabled = false;

Aunque el resto de componentes asociados a el continuarán activos (Como colisiones si se las has añadido). Por lo que creo que te convendrá más deshabilitar el objeto entero.

gameObject.SetActive(false);

En cualquier caso, los enlaces que te han dejado a la documentación te pueden dar más información sobre el tema.

Share this post


Link to post
Share on other sites

primero necesitas almacenar todos los objetos en un arreglo, y preferentemente ordenados manualmente en el orden que deseas que se muestren.

public Transform[] Objectos = new Transform[0];

Luego creas 2 funciones, una función Next, Back y una variable entera para almacenar el índice actual, esto sirve para recorrer el arreglo y activar/desactivar los objetos correspondientes.

public int ObjectIndex = 0;

public void Next()
{
	ObjectIndex ++;
	ObjectIndex = Mathf.Clamp(ObjectIndex, 0, Objects.Length - 1);
    Objects[ObjectIndex].gameObject.SetActive(true);
    Objects[ObjectIndex - 1].gameObject.SetActive(false);
}

public void Next()
{
	ObjectIndex --;
	ObjectIndex = Mathf.Clamp(ObjectIndex, 0, Objects.Length - 1);    
    Objects[ObjectIndex].gameObject.SetActive(true);
    Objects[ObjectIndex + 1].gameObject.SetActive(false);
}

Ahola solo bastaría con llamar las funciones -

Saludos. 

Share this post


Link to post
Share on other sites

como dice @francoe1 es mejor tenerlo "cacheado" porque si luego quieres volver a activarlo (suponiendo que lo hayas desactivado con "Set
Active(false)" un gameObject.Find no los encotrara si estan desactivados...

Share this post


Link to post
Share on other sites

Gracias chicos.

 

Veréis, es que tenia un script mas o menos apañado que me funcionaba con las luces, pero con los modelos no funciona, o quizás no se que componente asignar..

 

El script era este:

3c11e594e54d95dc0f3afd7feaa43578o.png

 

Con ese código lo que hago es que al pulsar una tecla, (space en este caso) un spotlight se apaga y viceversa, me gustaría hacer lo mismo con un gameobject, seria posible??

Script:

#pragma strict
 
function Start () {
 
}
 
function Update () {
 
    if(Input.GetKeyDown("space")){
        GetComponent.<Light>().enabled = !GetComponent.<Light>().enabled;
        
    }
    
}

 

Edited by Alvaro95

Share this post


Link to post
Share on other sites

Es eso Javascript? faa una reliquia, hoy debe estar carísimo.

10 hours ago, Alvaro95 said:

me gustaría hacer lo mismo con un gameobject, seria posible??

Dos cosas:

  1. para que no te comas un garrón mal y te quieras colgar del techo de tu casa (como el de dark) YA cambiate a C#.
  2. Andate al link que te puse arriba, eso se llama Documentación y tenés todo lo que necesitas, (sea para esta pregunta o para la que sea), andate al panel de la izquierda y buscá dentro del namespace "UnityEngine" la clase GameObject, de ahí busca todos sus métodos publicos, o miembros de interés, la respuesta a tu pregunta está ahí. Siempre revisá tu versión por lo general no hay grandes cambios. Ponele que te preguntas lo mismo para otro componente, bueno lo buscás igual y tenés lo necesario, facilísimo.

 

Share this post


Link to post
Share on other sites
Sign in to follow this  

×
×
  • Create New...