2016-01-28 4 views
0

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

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

Что текст должен отображаться контролируется игроком, поэтому я добавил следующие фрагменты кода в моем игрока сценария:

public GUIText scoreText; 
void Update() 
    { 
     scoreText.pixelOffset = new Vector2 (300, 300); 
    } 

void UpdateScore() 
    { 
     scoreText.text = "Lives: " + lives; 
    } 

, но это ничего не меняет, а void UpdateScore() Ждут» т.

Я довольно новичок в Unity, так что это, вероятно, очень простая ошибка ... но что я делаю ужасно неправильно?

EDIT: void UpdateScore() работает сейчас, когда я звоню от void FixedUpdate().

EDIT (снова): Я исправил проблему, создав новый пустой объект, в котором ничего нет, кроме преобразования (которое никогда не перемещается) и текстового компонента графического интерфейса. Проблема, которую я сейчас имею в том, что якорь в тексте графического интерфейса работает очень странно - он работает, только если я положил его на нижний левый (тогда как я хочу его в левом верхнем углу). Попытка изменить якорь перемещает его где-то с экрана. Вот моя иерархия: enter image description here

+0

Как выглядит ваша иерархия? –

ответ

0

Убедитесь, что ваш компонент GUIText прикреплен к собственному GameObject, который не перемещается. Я бы предположил, что прямо сейчас это на вашем плеере или в камере.

(Когда GameObject компонент GUIText прикрепляются к перемещениям, экранное положение отображаемого текста также перемещается.)

+0

Я исправил проблему, создав новый пустой объект, в котором ничего нет, кроме преобразования (которое никогда не перемещается) и текстового компонента графического интерфейса. Проблема, которую я сейчас имею в том, что якорь в тексте графического интерфейса работает очень странно - он работает, только если я положил его на нижний левый (тогда как я хочу его в левом верхнем углу). Попытка изменить якорь перемещает его где-то с экрана. –

0

Вы уверены, что вы знаете, что делает якорь в GUIText? Якорь - это точка в тексте, к которому применяется смещение. Например. если анкер «верхний левый», а смещение пикселей (300, 300), верхний левый угол текста будет 300 пикселей вправо и 300 пикселей над нижним левым углом экрана. Если якорь «внизу слева», нижний левый угол текста будет 300 пикселей справа и 300 пикселей над нижним левым углом экрана.

Если вы хотите, чтобы текст быть определенное количество пикселей от верхнего левого угла экрана вместо нижнего левого угла, измените код на:

scoreText.pixelOffset = new Vector2 (300, Screen.height - 300); 

В качестве альтернативы, используйте Canvas Текстовый элемент вместо GUIText. Якорь элемента Text - это его экранное смещение, в отличие от GUIText.