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 шт):

Автор решения: Flamer

caretPosition работает странно, но stringPosition работает так, как должен caretPosition. С помощью него можно спокойно перемещать положение caret в нужную точку.

→ Ссылка