Я пытаюсь создать простой текстовый редактор в Unity.
Сейчас я пытаюсь переопределить стандартную End функциональность клавиш клавиатуры.
Я использую «новую» систему пользовательского интерфейса и InputField
в качестве текстового редактора.Он имеет многострочный доступ.Обычно, когда вы нажимаете Конец (на обычной физической клавиатуре), когда фокус находится на InputField
, каретка идет до конца всего TextField
.Я хочу, чтобы оно доходило до конца текущей строки.По сути, мне нужна та же функциональность, что и в обычных текстовых редакторах, таких как Notepad ++.
Пока у меня есть сценарий на InputField
, который выглядит следующим образом:
public InputField editor; // This is the InputField
void Update()
{
if (Input.GetKeyDown(KeyCode.End))
{
string code = editor.text;
int caretPos = editor.caretPosition;
int newLineIndex = FindEndOfLine(code, caretPos);
editor.caretPosition = newLineIndex;
}
}
int FindEndOfLine(string text, int startIndex)
{
for (int i = startIndex; i < text.Length; i++)
{
Debug.Log(text[i]);
if (text[i] == '\n')
{
Debug.Log("FOUND IT: " + i);
return i;
}
}
return text.Length;
}
Если яиспользуйте это для другой клавиши, например KeyCode.Y
, тогда она работает довольно хорошо.Он находит правильную позицию каретки и перемещает каретку в это место.Однако затем он также печатает символ Y
.
Когда я использую KeyCode.End
и нажимаю клавишу End , он просто переходит в конец всего TextField
.Поэтому я думаю, что мой код работает, но он выполняет обычную функциональность ключа End после того, как мой скрипт был выполнен.
Как мне предотвратить это поведение по умолчанию?Я гуглял уже 25 минут.