Как выбрать объект класса, используя один из его атрибутов - PullRequest
2 голосов
/ 06 марта 2019

Я пишу код на C # в Unity, используя Visual studio. Я пытаюсь выбрать объект, который сделан из класса, используя значение «позиция». Я изо всех сил пытаюсь объяснить это, но по сути у меня есть холст, называемый графствами, а внутри есть пара объектов пользовательского интерфейса, таких как Leinster и Connacht:

Screenshot

Я бегу через всех детей графств этого холста, чтобы выбрать их всех по одному.

for (int i = 0; i < Counties.transform.childCount; i++)
{
    Transform t = Counties.transform.GetChild(i);
    Current = t.name;
}

Однако мне также нужно изменить некоторые значения каждого из этих детей, поскольку у каждого из них есть объект в моем сценарии, который соответствует каждому из них. Например, в приведенном ниже коде это объект, который соответствует Ленстеру.

public County Leinster = new County(2630000, "NorthernIreland", "Connacht", "Munster", "Wales", 0);

То, что я не знаю, как сделать, это на самом деле соединить эти два. Я поместил в объект значение «position», которое является последним числом. Для Ленстера это 0, потому что это первый ребенок в графствах холста, а следующий (Коннахт) будет 1 и так далее. Мой вопрос в основном, как бы я использовал это число, чтобы выбрать соответствующий объект класса, который имеет тот же номер, что и его «позиция»? Спасибо за любые предложения.

1 Ответ

2 голосов
/ 06 марта 2019

Если я правильно понимаю, вы хотите получить доступ к компоненту сценария, назначенному дочерним элементам вашего родителя. Вы можете использовать метод GetComponent:

for (int i = 0; i < Counties.transform.childCount; i++)
{
    Transform t = Counties.transform.GetChild(i);
    Current = t.name;
    County county = t.GetComponent<County>();

    //do something with county object...
}

Вы также можете сначала добавить компонент к своему объекту, если его нет:

for (int i = 0; i < Counties.transform.childCount; i++)
{
    Transform t = Counties.transform.GetChild(i);
    Current = t.name;
    County county = t.GetComponent<County>();
    if (county == null)
       county = t.gameObject.AddComponent<County>();

    //do something with county object...
    county.name = t.name;
}

Если вы ищете простой способ доступа к своим округам, вы также можете использовать словарь:

using System.Collections.Generic;

Dictionary<string, County> Counties = new Dictionary<string, County>();

//add County to dictionary
Counties.Add("NorthernIreland", new County(2630000, "NorthernIreland", "Connacht", "Munster", "Wales", 0));

//get County from dictionary
Counties["NorthernIreland"] //and do something with it...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...