Я создаю простое поле горизонтальной прокрутки текста для моей игры. Я настроил его с помощью компонента ScrollRect
, но я также хочу, чтобы текст сам прокручивался горизонтально.
ScrollRect
работает нормально, я могу перетащить текст назад и на четвертый. Тем не менее, простой сценарий тестовой прокрутки, который я создал на основе этого сценария, в то время как он прекрасно перемещает текст, не сбрасывает позицию текста, как только он выходит за пределы экрана.
Примечание. Я не имею в виду весь экран, я имею в виду область, в которой текст доступен для просмотра:
Мой код :
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.