Как добавить компонент к игровому объекту на основе переменной, которую можно назначить в инспекторе? - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь создать игру о стрельбе из лазеров разных типов, и у каждого из них свое поведение. При одновременном срабатывании эти лазеры станут синергизированными и станут одним, более мощным лазером, который использует все характеристики отдельных лазеров одновременно.

Для выполнения sh я создаю пустой объект GameObject для представления лазера. и затем добавление компонентов, основанных на различном поведении, которое это будет иметь. Каждый из обычных, не синергированных лазеров определяется сценарием объекта со списком поведения, которое они будут использовать - из какого типа объекта составлен список, это проблема, с которой я столкнусь через секунду. Дело в том, что моя цель состоит в том, чтобы создать экземпляр пустого GameObject и добавить компоненты из объединенного списка всех вариантов поведения, которые мне нужно использовать.

Так что проблема в том, что я не могу понять, как добавить компоненты в объект, так что я могу вручную выбрать, какие сценарии добавить в окне инспектора для объектов сценариев. Я пытался использовать строки как тип, но я не мог заставить это работать; та же сделка возникла, когда я попробовал Objects Я не могу напрямую назначить сценарии для компонентов; и я не могу назначить MonoBehaviours или заставить их работать при добавлении компонента либо. Если возможно, я бы хотел использовать строки для добавления компонентов, основанных на имени скрипта, поэтому я просто поместу здесь часть моего неудачного кода для этого конкретного случая.

ПРИМЕЧАНИЯ: в данном случае «Laser» относится к структуре, которую я создал почти с теми же переменными, что и в объекте сценариев, так что вы можете просто обращаться с ним как с объектом сценариев, это в основном то же самое; фактический объект сценариев называется «LaserProperties». Один из конструкторов буквально просто принимает значение LaserProperties и вводит все соответствующие переменные. «LaserBehaviours» относится к списку строк, которые я пытаюсь превратить в компоненты. Код только выполняется в функции Start для целей тестирования.

public LaserProperties props;
private void Start(){
    Laser laser = new Laser(props);
    GameObject laserObject = Instantiate(new GameObject("New Laser"), transform.position, Quaternion.identity);
    foreach(string laserBehaviour in laser.laserBehaviours){
        Component behaviour = laserBehaviour as Component;
        laserObject.AddComponent(behaviour.GetType());
    }
}

Мне известно, что я не корректно приводил строку к компоненту, но если у кого-то есть какие-либо предложения о том, как это сделать, было бы очень радушно.

Если у вас есть ответ, большое спасибо, что это очень полезно.

1 Ответ

0 голосов
/ 24 марта 2020

Чтобы превратить строку в компонент, используйте

string componentName = "FooBar";
gameObject.AddComponent(System.Type.GetType(componentName));

Хотя это не очень безопасно для ошибок. enum, чтобы обернуть это, как предполагает derHu go, может быть более надежным в будущем, поскольку оно защищает от орфографических ошибок для новых назначений инспекторов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...