Я пытаюсь установить некоторые переменные в другом объекте (называемом камерой), когда я его покидаю. Однако я не могу получить доступ к сценарию этого конкретного 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




Вы можете быть миссией rbSenator GameObject. Дайте мне знать, что вы назначаете этот rbSenator GameObject через инспектора?? Если да, проверьте это поле rbSenator в Inspector во время выполнения. Примечание. Иногда единство делает поля пустыми во время выполнения.
Если есть только одна комната, которая является дочерней для вашего объекта, вы можете использовать GetComponentInChildren<TypeOfYourRoom>()
Если их несколько, используйте цикл for, чтобы найти тот, который вы хотите, с его именем или чем-то еще.
Комната не является потомком объекта, это автономный объект, который может содержать несколько сенаторов. Также есть куча палат и куча сенаторов. Не уверен, как цикл поможет, так как я уже знаю имя и идентификатор камеры, но, видимо, Unity не позволит мне получить его с помощью строки. Еще раз спасибо за подсказку.
Ок, не так понял. Unity позволяет вам найти игровой объект по его имени, используя GameObject.Find("theName"). Что вы можете сделать, так это создать собственный тег, затем получить все объекты, используя GameObject.FindGameObjectsWithTag(), а затем получить тот, который вы хотите.
Очевидно, что Unity не примет строку (originChamberName) вместо литерала ("This Chamber"). Я не могу использовать литерал, потому что я не знаю в начале, в какой палате будет находиться сенатор во время выполнения. На самом деле, он должен перемещаться по разным камерам.
Я так делаю и все отлично работает string myTag = "tag"; GameObject.FindGameObjectsWithTag(myTag);
GameObject.Find(originChamberName);возвращает ноль. Вам нужно отладить, почему.