/ / Enum apuntando a gameobjects? - c #, unity3d, enums, gameobject

Enum apuntando a gameobjects? - c #, unity3d, enums, gameobject

Por lo tanto, tengo esta idea loca de tener enumeraciones que apuntan a juegos de objetos.

Esto es lo que quiero hacer:

/* These enums would hold gameobjects instead of ints */
enum exampleEnum{
AddPanel,
ListPanel
}

public class GUIManager : MonoBehaviour {
void Start()
{
EnablePanel(exampleEnum.AddPanel);
}

void EnablePanel(GameObject panel)
{
panel.setActive(true);
}
}

¿Hay alguna manera de hacer funcionar esto? ¿O una solución?

Esto podría ser posible con algo más que una enumeración, pero no sé si existe y estoy buscando en la web una solución de este tipo.

Respuestas

6 para la respuesta № 1

Esto satisfaría su requisito, funciona para cualquier cantidad de valores de enumeración o paneles.

// Add this to each of your panels, the enum field can be integrated into your other behaviours as well
public class EnumPanel : MonoBehaviour
{
// configurable from the Editor, the unity way.
public ExampleEnum Type;
}

// Assign all your panles in the editor (or use FindObjectsByType<EnumPanel> in Start())
public class GUIManager : MonoBehaviour
{
// configurable from the Editor, the unity way.
public EnumPanel[] Panels;

void Start()
{
// Optionally find it at runtime, if assigning it via the editor is too much maintenance.
// Panels = FindObjectsByType<EnumPanel>();
EnablePanel(ExampleEnum.AddPanel);
}

void EnablePanel(ExampleEnum panelType)
{
foreach(var panel in Panels)
{
if(panel.Type == panelType)
EnablePanel(panel.gameObject);
}
}

void EnablePanel(GameObject panel)
{
panel.setActive(true);
}
}

1 para la respuesta № 2

No sé por qué la respuesta de @Paradox Forge estaba equivocada, pero tal vez esto te ayude.

System.Collections.Generic.Dictionary

No tengo mucho tiempo para explicar la clase de diccionario, pero así es como puedes usarlo. Esto costará algo de rendimiento, pero tiene una legibilidad muy buena

    public class GUIManager : MonoBehaviour {
public enum exampleEnum{
AddPanel,
ListPanel
}

//For readability you can also add "using System.Collections.Generic;" on the top of your script
private System.Collections.Generic.Dictionary<exampleEnum,GameObject> exampleDictionary = new System.Collections.Generic.Dictionary<exampleEnum, GameObject>();

private GameObject SomeGameObject;
private GameObject SomeOtherGameObject;

void Start()
{
//You have to add all the enums and objects you want to use inside your GUIManager.
exampleDictionary.Add (exampleEnum.AddPanel, SomeGameObject); //Add panel will be linked to SomeGameObject
exampleDictionary.Add (exampleEnum.ListPanel, SomeOtherGameObject); //List Panel will be linked to SomeOtherGameObject

EnablePanel(exampleEnum.AddPanel);
}

void EnablePanel(exampleEnum examplePanel)
{
if (!exampleDictionary.ContainsKey (examplePanel)) //If the given panel does not exist inside the dictionary
return; //Leave the method

GameObject panelToEnable = exampleDictionary [examplePanel]; //Will return the GameObject linked to given panel
panelToEnable.SetActive(true); //Enable the gameobject
}
}

Si quieres saber más sobre la clase de diccionario, ve a: Diccionario