GUI выравнивание текста с движущейся камерой в Unity
Я делаю шутер типа сверху вниз в Unity. Игрок может перемещаться по миру, но камера движется вместе с ним, поэтому игрок всегда находится в центре экрана.
Я пытаюсь отобразить текст в верхнем левом углу экрана, поэтому я прикрепил компонент GUItext к основной камере. Результат оказался довольно интересным - в тот момент, когда игрок сдвинул текст с экрана.
То, что текст должен отображать, контролируется игроком, поэтому я добавил следующие фрагменты кода в свой скрипт игрока:
public GUIText scoreText;
void Update ()
{
scoreText.pixelOffset = new Vector2 (300, 300);
}
void UpdateScore ()
{
scoreText.text = "Lives: " + lives;
}
но это ничего не изменило, и void UpdateScore ()
тоже не работал
Я довольно новичок в Unity, так что это, вероятно, очень простая ошибка... но что я делаю ужасно неправильно?
РЕДАКТИРОВАТЬ: void UpdateScore ()
работает теперь, когда я звоню из void FixedUpdate ()
,
РЕДАКТИРОВАТЬ (снова): я исправил проблему, создав новый пустой объект, в котором ничего нет, кроме преобразования (которое никогда не движется) и текстового компонента GUI. Проблема, с которой я столкнулся сейчас, заключается в том, что привязка к тексту графического интерфейса работает очень странно - она работает только в том случае, если я помещаю ее внизу слева (тогда как я хочу, чтобы она была вверху слева). Попытка изменить якорь перемещает его куда-нибудь за пределы экрана. Вот моя иерархия:
2 ответа
Вы уверены, что знаете, что делает якорь GUIText? Якорь - это точка, к которой относится смещение. Например, если привязка - "верхний левый", а смещение пикселя - (300, 300), верхний левый угол текста будет на 300 пикселей правее и на 300 пикселей выше левого угла экрана. Если якорь "левый нижний", нижний левый угол текста будет на 300 пикселей правее и на 300 пикселей выше левого угла экрана.
Если вы хотите, чтобы текст располагался на определенном количестве пикселей в левом верхнем углу экрана, а не в левом нижнем углу, измените код на:
scoreText.pixelOffset = new Vector2 (300, Screen.height - 300);
В качестве альтернативы используйте элемент Canvas Text вместо GUIText. Якорь элемента Text - это его смещение на экране, в отличие от GUIText.
Убедитесь, что ваш компонент GUIText присоединен к своему собственному GameObject, который не перемещается. Я предполагаю, что прямо сейчас это на вашем плеере или камере.
(Когда GameObject компонент GUIText прикреплен к ходам, положение отображаемого текста на экране также перемещается.)