Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: Alex en Abril 11, 2018, 05:37:47 AM

Título: Activar un objeto Y Desactivar Otro Al Mismo Tiempo
Publicado por: Alex en Abril 11, 2018, 05:37:47 AM
Hola Gente! 
 
He estado desarrollando un script que active un carro al PRESIONAR UN BOTÓN, pero quiero que cuando active el carro, los otros dos estén desactivados, mediante botones y el event trigger  aqui mi script:
 

   

using System.Collections;
using UnityEngine;
using UnityEngine.EventSystems;
public class BotonActivador : MonoBehaviour {
bool button_control = false;
public GameObject Carro1;
public GameObject Carro2;
public GameObject Carro3;
    public void Coche1(BaseEventData eventData)
{
Carro1.gameObject.SetActive(true);
}
    public void Coche2(BaseEventData eventData)
{
Carro2.gameObject.SetActive(true);
}
    public void Coche3(BaseEventData eventData)
{
Carro1.gameObject.SetActive(true);
}
    void Update () {
        //en esta parte no se como ponerle que para cuando un carro este activo, el otro se desactive.
if (button_control)
        
        {
         Carro1.gameObject.SetActive(false);
         Carro2.gameObject.SetActive(false);
         Carro3.gameObject.SetActive(false);
}
        else
            Carro1.gameObject.SetActive(false);
            Carro2.gameObject.SetActive(false);
            Carro3.gameObject.SetActive(false);
}
}

   
       
   


   en el void update esta el problema no se como ponerle para que desactive a los otros dos cuando uno ya esta activo, y hacer lo mismo cuando use el carro 2 o el 3


    


   algo como: 
   

      
      
         
             
         
         
            uso carro 1; desactivo 2 y 3
         
         
            uso carro 2; desactivo 3 y 1
         
         
            uso carro 3; desactivo 1 y 2
         
         
         
         
             
         
      
   [/quote]
   
       
   


   Porfavor si alguien puede ayudarme!


    
Título: Activar un objeto Y Desactivar Otro Al Mismo Tiempo
Publicado por: brok en Abril 11, 2018, 11:01:38 AM
Tienes que poner cada vez que quieras activar un carro el las dos líneas siguientes desactivar los dos carros que quieras desactivar
 
 
Título: Activar un objeto Y Desactivar Otro Al Mismo Tiempo
Publicado por: Alex en Abril 11, 2018, 04:18:38 PM
Cita de: brok date=1523437298Tienes que poner cada vez que quieras activar un carro el las dos líneas siguientes desactivar los dos carros que quieras desactivar
   
   
       
   


Osea en void update
 

Poner If(button_control)
carro1.gameObject.SetActive (True)
else 
carro2.gameObject.SetActive(false)
carro3.gameObject.SetActive (false)
}
If (button_Control)
carro2.gameObject.SetActive (True)
Else
carro1.gameObject.SetActive (false)
carro3.gameObject.SetActive (false)

 
Algo así?  Poner de referencia cuando un carro este activo, desactivar los otros 2.
 
Esta bien lo que hago?
Título: Activar un objeto Y Desactivar Otro Al Mismo Tiempo
Publicado por: francoe1 en Abril 11, 2018, 05:45:53 PM
Por lo que intento entender del código estas intentando hacer un Selector de Coches.
 
Primero -
 
1º Crear un Arreglo de GameObject, luego asignar todos los coches en escena.
 

public GameObject[] Coches;

 
2º Crear la lógica para seleccionar el siguiente o el anterior.
 

private int _current;
public void Next()
{
_current ++;
if(_current >= Coches.length)
   _current = 0;
OnChange(_current);
}
public void Last()
{
_current ++;
if(_current < 0)
   _current = Coches.Length -1;
OnChange(_current);
}          
                   
private void OnChange(int index){}

 
3º Necesitas obtener el actual objeto.
 

public GameObject GetCurrent { get { return Choches[_current]; } }

 
4º Crear la lógica para Activar y desactivar los objeto, crearemos una variable GameObject para almacenar temporalmente el objeto actual, luego dentro de la función OnChange vamos a hacer lo siguiente
 

private GameObject _lastObject { get; set; }
public virtual void OnChange(int index)
{
if(_lastObject != null)
   _lastObject.SetActive(false);
_lastObject = GetCurrent();   
GetCurrent().SetActive(true);
}

 
y eso seria todo.
 
 
 
Luego desde los Botones de UGUI seleccionas el componente y llamas la Función Next o Last.