Noticias

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

¿Unity permite desactivar scripts?

Iniciado por Alvaro95, Agosto 27, 2018, 11:38:35 PM

Tema anterior - Siguiente tema
¿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.
 
 

¿Por qué quieres hacer algo así? No logro a entenderlo. Un saludo.

Cita de: Alvaro95 date=1535405915¿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.
   
   
       
   


https://docs.unity3d.com/Manual/CreatingAndUsingScripts.html
 
https://docs.unity3d.com/ScriptReference/MonoBehaviour.html

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". 

puedes desactivar el componente
 

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

 
 

Septiembre 02, 2018, 02:32:45 AM #5 Ultima modificación: Septiembre 02, 2018, 02:33:54 AM por Alvaro95
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.

Cita de: Alvaro95 date=1535848365Buenas, 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.

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. 

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...

Septiembre 12, 2018, 05:59:41 AM #9 Ultima modificación: Septiembre 12, 2018, 06:00:47 AM por Alvaro95
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:
 

 
 
 
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;


           


       }


       


   }

 
 

Es eso Javascript? faa una reliquia, hoy debe estar carísimo.
 
Cita de: Alvaro95 date=1536724781me 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.


 

Etiquetas: