Buenas, quiero saber si habría alguna forma más simple de hacer que si un gameobject está activo los demás no lo esten, ya que mi código me parece muy basura querría optimizarlo
public GameObject CuadradoG;
public GameObject cuadrado;
public GameObject TrianguloG;
public GameObject triangulo;
public GameObject CirculoG;
public GameObject circulo;
public GameObject PoligonoG;
public GameObject poligono;
int aleatorio = 0;
//-----------------------------------------------------------------
void OnMouseDown () {
if (gameObject.tag == ("bueno")){
aleatorio = Random.Range (2, 6);
Debug.Log (aleatorio);
}
if (aleatorio == 2){
CuadradoG.SetActive (true);
cuadrado.SetActive (true);
Debug.Log ("activo");
if (CuadradoG.active = true){
TrianguloG.SetActive (false);
triangulo.SetActive(false);
CirculoG.SetActive(false);
circulo.SetActive(false);
PoligonoG.SetActive(false);
poligono.SetActive(false);
}
}
if (aleatorio == 3){
TrianguloG.SetActive (true);
triangulo.SetActive (true);
Debug.Log ("activo");
if (TrianguloG.active = true){
CuadradoG.SetActive (false);
cuadrado.SetActive(false);
CirculoG.SetActive(false);
circulo.SetActive(false);
PoligonoG.SetActive(false);
poligono.SetActive(false);
}
}
if (aleatorio == 4){
CirculoG.SetActive (true);
circulo.SetActive (true);
Debug.Log ("activo");
if (CirculoG.active = true){
TrianguloG.SetActive (false);
triangulo.SetActive(false);
CuadradoG.SetActive(false);
cuadrado.SetActive(false);
PoligonoG.SetActive(false);
poligono.SetActive(false);
}
}
if (aleatorio == 5){
PoligonoG.SetActive (true);
poligono.SetActive (true);
Debug.Log ("activo");
if (PoligonoG.active = true){
TrianguloG.SetActive (false);
triangulo.SetActive(false);
CirculoG.SetActive(false);
circulo.SetActive(false);
CuadradoG.SetActive(false);
cuadrado.SetActive(false);
}
}
}
(Les asigno un número aleatorio para que los gameobjects aparezcan de forma aleatoria)
Gracias :D
Pues de entrada "funciones" y el maravilloso operador ! (not)
Como dice iRobb puedes utilizar funciones, después yo utilizara un switch en vez de utilizar ifs, y por ultimo intentaría utilizar la jerarquía de la escena para recorrerla en vez de poner cada uno de los GameObjects, pero eso depende de como tengas montada la escena.
Te paso el codigo y un package por si no lo sabes aplicar.
Yo puse 6 cubos en la escena, pero los hice 'hijos' de un GameObject vacio. lo que hace es buscar en los hijos de GObject y si no es el seleccionado los deshabilita, lo hice asi para que no deshabilitara la cam y la light.
using UnityEngine;
using System.Collections.Generic;
public class testCode : MonoBehaviour {
public Camera cam;
// Update is called once per frame
void Update () {
if(Input.GetMouseButton())LeftMouseClick();
}
private GameObject FindHitObject() {
Ray ray = cam.ScreenPointToRay (Input.mousePosition);
RaycastHit hit;
if(Physics.Raycast(ray, out hit)) return hit.collider.gameObject;
return null;
}
private void LeftMouseClick() {
GameObject hitObject = FindHitObject();
if(hitObject) {
ChangeStateOfObjects(hitObject);
}
}
private void ChangeStateOfObjects(GameObject excluded)
{
List<Transform> lst = new List<Transform>( this.GetComponentsInChildren<Transform>());
foreach (var obj in lst) {
if(obj.name != excluded.name && this.name != obj.name){
obj.gameObject.SetActive(!obj.gameObject.activeSelf);}
}
}
}
Un saludo y espero que te sirva.
ExportTuto.unitypackage
Hola, con un switch y reacomodando las acciones que haces (activar en este caso)
public GameObject CuadradoG;
public GameObject cuadrado;
public GameObject TrianguloG;
public GameObject triangulo;
public GameObject CirculoG;
public GameObject circulo;
public GameObject PoligonoG;
public GameObject poligono;
int aleatorio = 0;
//-----------------------------------------------------------------
void OnMouseDown () {
if (gameObject.tag == ("bueno")){
aleatorio = Random.Range (2, 6);
Debug.Log (aleatorio);
}
//Como vas a activar uno solo, arrancas de entrada desactivando todo y luego a partir del valor aleatorio activas al ganador
CuadradoG.SetActive (false);
cuadrado.SetActive (false);
TrianguloG.SetActive (false);
triangulo.SetActive(false);
CirculoG.SetActive(false);
circulo.SetActive(false);
PoligonoG.SetActive(false);
poligono.SetActive(false);
switch( aleatorio )
{
case 2:
CuadradoG.SetActive (true);
cuadrado.SetActive (true);
break;
case 3:
TrianguloG.SetActive (true);
triangulo.SetActive(true);
break;
case 4:
CirculoG.SetActive(true);
circulo.SetActive(true);
break;
case 5:
PoligonoG.SetActive(true);
poligono.SetActive(true);
break;
}
}
Muchas gracias a todos :DD