Unity, TMPInputField и его сломанная каретка
В своём проекте я использую объект TMPInputField, для ввода текста пользователем. Если пользователь допускает ошибку, неверно введённый символ окрашивается в красный цвет через скрипт с помощью тега <color>. Но после выполнения скрипта, каретка остаётся на прежнем месте. Выглядит это примерно вот так:
Сам текст в TMPInputField, вместе с тегами выгладит вот так: Каре<color=#bf0c34>о</color>. Отладка кода показала, что в данном случае, когда пользователь вводит "о", позиция каретки равна "5", после выполнения скрипта, то есть TMPInputFieldFocus.text = errorText; позиция становится равной "4".
Я пробовал исправить это, установив позицию каретки вручную:
TMPInputFieldFocus.caretPosition += 1;
В данном случае свойство"caretPosition" действительно менялось с "4" на "5". Но для пользователя изменений не было, и каретка была на том же месте. Также я пробовал менять положение каретки другим способом:
TMPInputFieldFocus.MoveTextEnd(false);
В этом случае свойство"caretPosition" также менялось с "4" на "5" и в этот раз положение каретки изменялось и для пользователя, но данный способ не позволяет выбрать конкретное положение каретки.
То есть Оба варианта меняют положение каретки на позицию "5", но первый способ в отличии от второго, по какой-то причине не работает. Моя догадка, первый способ перемещает каретку внутрь тега. Но при этом, значение больше "5" для каретки поставить невозможно.
Пытался также разобраться, почему объект TMPInputField игнорирует теги и их содержимое, при размещении каретки. При том, что добавление обычного текста скриптом работает корректно. Но догадаться и решить собственно проблему самостоятельно не вышло. Может быть у вас есть идеи?
Ответы (1 шт):
caretPosition работает странно, но stringPosition работает так, как должен caretPosition. С помощью него можно спокойно перемещать положение caret в нужную точку.
