Ich mache eine Anwendung mit Augmented Reality mit ArToolkit.Aktivieren und Deaktivieren von GameObjects durch toggles - Augmented Reality
Es ist sehr einfach.
Ich zeige einige Elemente entsprechend der Toggle-Stufe. Beispiel Ich habe 3 Elemente
Wenn ich ausführen, wird ein Element angezeigt. Wenn ich zuerst auf toggle
klicke, wird dieses Element ausgeblendet und das nächste Element angezeigt. Wenn ich in die zweite toggle
klicke, wird das vorherige Element ausgeblendet und das nächste wird angezeigt.
Mit anderen Worten, wenn ich nur das erste Element (Cube) ausführen wird angezeigt. Wenn ich in der ersten Toggle klicken, wobei jedes Element (Würfel, esphere, cilinder) ist, anzeigen:
Dies ist meine Hierarchie:
Innen ArControlador
sind die Markierungen. Innerhalb Canvas
sind die Umschalter.
Aber eigentlich baue ich dieses Projekt auf grobe Weise, jedes Element mit GameObject.Find
bekommen. Ich möchte die GameObjects elegant gestalten, den Code sauber halten und skalierbar sein.
Ich möchte die GameObjects auf eine automatisierte Weise erhalten, also wenn ich 3, 5, 10 oder 20 Elemente habe, wird der Code perfekt laufen.
denke ich in einigen Möglichkeiten wie Array
von GameObjects
, List
von GameObjects
, einen GameObject
Vater schaffen und alle Childs wie FindGameObjectsWithTag
bekommen, aber ich habe nicht erfolgreich.
Dies ist mein Code, es funktioniert schon, aber in rohen Weise GameObject
pro GameObject
Geting und aktivieren/deaktivieren Sie die Gameobjects mit aux
Variable finden Sie unter:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System.Linq;
using System.Collections.Generic;
using System;
using UnityEngine.SceneManagement;
public class AlternaEntreOsPassos : MonoBehaviour
{
private UnityEngine.UI.Toggle[] toggles;
public int aux = 0;
public GameObject marker1, marker2, marker3;
void Awake()
{
//Find manually the objects
marker1 = GameObject.Find("Marcador1");
marker2 = GameObject.Find("Marcador2");
marker3 = GameObject.Find("Marcador3");
}
void Start()
{
toggles = GetComponentsInChildren<UnityEngine.UI.Toggle>();
if (toggles.Length > 0)
{
//2nd and 3rd false for not be displayed yet...
marker2.SetActive(false);
marker3.SetActive(false);
for (int i = 0; i < toggles.Length; i++)
{
int closureIndex = i;
toggles[closureIndex].interactable = false;
toggles[closureIndex].onValueChanged.AddListener((isOn) =>
{
if (isOn == true)
{
aux++;
//Disabling the toggle that was clicked
toggles[closureIndex].interactable = false;
if (closureIndex < toggles.Length - 1)
{
//Activatin the next toggle
toggles[closureIndex + 1].interactable = true;
}
if (aux == 1)
{
//Desactivating the actual element and activating the next element
marker1.SetActive(false);
marker2.SetActive(true);
}
if (aux == 2)
{
//Desactivating the actual element and activating the next element
marker2.SetActive(false);
marker3.SetActive(true);
}
if (aux == 3)
{
marker3.SetActive(false);
}
}
}
);
}
toggles[0].interactable = true;
}
}
}
Also, wie kann ich die GameObjects
in intelligente bekommen wie die obigen Beispiele (array
, list
, tag
) oder etwas anderes.