Текст горизонтальной прокрутки не сбрасывается в начальную позицию - PullRequest
0 голосов
/ 20 апреля 2020

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

ScrollRect работает нормально, я могу перетащить текст назад и на четвертый. Тем не менее, простой сценарий тестовой прокрутки, который я создал на основе этого сценария, в то время как он прекрасно перемещает текст, не сбрасывает позицию текста, как только он выходит за пределы экрана.

Примечание. Я не имею в виду весь экран, я имею в виду область, в которой текст доступен для просмотра: Diagram

Мой код :

void OnGUI ()
{
    if (isPaused) ScrollMusicText();
}

private void ScrollMusicText ()
{
    if (width == 0) width = musicText.textBounds.extents.x * 2;

    musicText.rectTransform.position = new Vector3(musicText.rectTransform.position.x - MUSIC_TEXT_SCROLL_SPEED, musicText.rectTransform.position.y, musicText.rectTransform.position.z);
    if (musicText.rectTransform.position.x > -width) musicText.rectTransform.position = new Vector3(width, musicText.rectTransform.position.y, musicText.rectTransform.position.z);
}

Я думаю, что сценарий состоит в том, что textBounds.extents.x * 2 примерно такой же длины, что и текст. Поэтому, как только текст (с помощью прокрутки или движения игрока) достигнет -width, он выйдет за пределы области просмотра, и его положение можно будет установить на другой стороне области просмотра, чтобы он вызывал прокрутку назад.

Однако оператор if (musicText.rectTransform.position.x > -width), кажется, запускает каждый вызов OnGUI, и я не понимаю, почему.

Более того, оператор musicText.rectTransform.position = new Vector3(width, musicText.rectTransform.position.y, musicText.rectTransform.position.z); фактически не перемещает текст, фактически он просто кажется, полностью останавливает все движения.


Примечания:

  • Движение ScrollRect является неограниченным.

  • musicText - это TextMeshPro с прикрепленным компонентом ContentSizeFitter (установленным по горизонтали: предпочтительный размер).

  • musicText Начальная позиция x 0.

1 Ответ

0 голосов
/ 21 апреля 2020

Подобно transform.position, rectTransform.position - это координата мира. Или в случае холста пользовательского интерфейса - расположение на всем холсте, а не только внутри вашего блока.

Таким образом, это зависит от положения не только этого текстового элемента, но также панели вокруг и всех других элементов вверх Иерархия.

Для того движения текста, которое вы сделаете sh, я предлагаю работать только с localPosition, который является родителем. Таким образом, вы можете переместить свой блок пользовательского интерфейса позже, не влияя на работу текста прокрутки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...