Как получить сценарий GameObject под выбранным GameObject? (Unity2D) (С#)

Я пытаюсь установить некоторые переменные в другом объекте (называемом камерой), когда я его покидаю. Однако я не могу получить доступ к сценарию этого конкретного GameObject из многих на сцене. Я получаю сообщение об ошибке «не установлен экземпляр объекта».

Обратите внимание, что сенатор «знает», в какой палате он находится, по идентификатору (int) и по имени (string). Палата также «знает», что там есть сенатор, но не кто. Мне нужно зачистить комнату, когда объект Сенатор уйдет, но я не могу получить сценарий для этой конкретной комнаты.

Кодировка выглядит следующим образом:

            // Do Work
            rbSenator.transform.position = newPos;
            Senator senatorSc = rbSenator.GetComponent<Senator>();
            originChamberName = senatorSc.GetInChamber();
            goChamber = GameObject.Find(originChamberName);
            Chamber originSc = goChamber.GetComponent<Chamber>();  //******************************** error
            originSc.FreeSeat(originChamber, senatorSeat);
            // Do Work
GameObject.Find(originChamberName); возвращает ноль. Вам нужно отладить, почему.
Draco18s no longer trusts SE 19.02.2019 16:45
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
69
2

Ответы 2

Вы можете быть миссией rbSenator GameObject. Дайте мне знать, что вы назначаете этот rbSenator GameObject через инспектора?? Если да, проверьте это поле rbSenator в Inspector во время выполнения. Примечание. Иногда единство делает поля пустыми во время выполнения.

Если есть только одна комната, которая является дочерней для вашего объекта, вы можете использовать GetComponentInChildren<TypeOfYourRoom>() Если их несколько, используйте цикл for, чтобы найти тот, который вы хотите, с его именем или чем-то еще.

Комната не является потомком объекта, это автономный объект, который может содержать несколько сенаторов. Также есть куча палат и куча сенаторов. Не уверен, как цикл поможет, так как я уже знаю имя и идентификатор камеры, но, видимо, Unity не позволит мне получить его с помощью строки. Еще раз спасибо за подсказку.

Martian 19.02.2019 17:38

Ок, не так понял. Unity позволяет вам найти игровой объект по его имени, используя GameObject.Find("theName"). Что вы можете сделать, так это создать собственный тег, затем получить все объекты, используя GameObject.FindGameObjectsWithTag(), а затем получить тот, который вы хотите.

Jichael 20.02.2019 09:11

Очевидно, что Unity не примет строку (originChamberName) вместо литерала ("This Chamber"). Я не могу использовать литерал, потому что я не знаю в начале, в какой палате будет находиться сенатор во время выполнения. На самом деле, он должен перемещаться по разным камерам.

Martian 20.02.2019 16:31

Я так делаю и все отлично работает string myTag = "tag"; GameObject.FindGameObjectsWithTag(myTag);

Jichael 20.02.2019 16:34

Другие вопросы по теме