Существует несколько способов получить доступ к gameObject в сценарии, в зависимости от того, какой именно объект gameObject вы пытаетесь получить.
Если вы пытаетесь получить доступ к GameObject поведения в скрипте поведения, тогда достаточно просто использовать gameObject
, так как это - gameObject, к которому привязано поведение.
Доступ к скрипту, который прикреплен к другому GameObject, может быть сложным. Для таких сцен, как MainMenu, нет ничего плохого в том, чтобы дать ему публичную ссылку в качестве примера:
public PlayPortalLoginButton loginButton;
void setLoginState(bool activate) {
loginButton.enabled = activate;
}
В этом примере вы просто перетащите элемент gameObject со сценарием PlayPortalLoginButton в сценарий менеджера, который будет контролировать, включен он или нет.
Если вам нужен более модульный подход к нему, например, в игровой сцене, когда вы заполняете объекты во время выполнения, вы можете воспользоваться следующим подходом:
PlayPortalLoginButton loginButton;
void setLoginState(bool activate) {
if(loginButton == null)
{
loginButton = FindObjectOfType<PlayPortalLoginButton>();
}
// Requires the correct version of .net otherwise you can reuse the check above...
loginButton?.enabled = activate;
}
В приведенном выше скрипте, если вам нужно было gameObject для loginButton, теперь вы можете получить к нему доступ через loginButton.gameObject.
Есть еще несколько примеров, которые вы могли бы использовать, и другие подходы, однако я чувствую, что вышеприведенного должно быть достаточно для меню.
Я также упомяну, что я избегаю примеров GameObject.Find
и GameObject.FindGameObjectsWithTag
, так как они более подвержены ошибкам. Они будут работать только в том случае, если ваше имя или тег помечены правильно, если вы переименуете их по какой-либо причине, тогда ваши сценарии не смогут найти объект, и это может вызвать проблему с устранением неполадок.
Используя FindObjectOfType, вы с меньшей вероятностью будете иметь ошибку, и если вы удалите этот тип сценария, эти сценарии вызовут ошибку, указывающую, что сценарий больше не существует. При рефакторинге, если вы щелкнете правой кнопкой мыши по имени поведения и используете опцию переименования, он автоматически обновит ссылки на скрипт во всем вашем коде.