У меня есть TMP_Inputfield, и я использую кастомный валидатор
using System;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
[Serializable]
[CreateAssetMenu(fileName = "InputValidator", menuName = "InputValidator", order = 51)]
public class InputValidator : TMP_InputValidator
{
private int indexDot;
private int countOfDots;
public override char Validate(ref string text, ref int pos, char ch)
{
int countOfDot = 0;
if (text != string.Empty)
{
int i = 0;
foreach (var item in text)
{
if (item == '.')
{
indexDot = i;
}
i++;
}
}
else
{
indexDot = 0;
}
if (text != string.Empty)
{
foreach (var item in text)
{
if (item == '.')
{
countOfDot++;
}
}
CheckDots(countOfDot);
}
if (text != string.Empty && ch == '.' && countOfDot < 3)
{
if (text.Substring(text.Length - 1) != ".")
{
//text += ch;
pos++;
return ch;
}
}
if (text.Length <= 3)
{
if (char.IsNumber(ch) && text.Length < 15)
{
if ((pos - indexDot) < 3)
{
//text += ch;
pos++;
return ch;
}
}
}
else
{
if (char.IsNumber(ch) && text.Length < 15)
{
if ((pos - indexDot) < 4)
{
//text += ch;
pos++;
return ch;
}
}
}
return (char)0;
}
private void CheckDots(int countOfDots)
{
this.countOfDots = countOfDots;
}
public int GetDots()
{
return countOfDots;
}
}
Здесь специально комментарии на "text += ch;" я знаю что нужно использовать Insert, но он почему то не работает, но суть не в этом. Если убрать комментарии(я имею ввиду раскомментировать эти строчки), то на пк все нормально, но стоит перейти на телефон, и когда вводишь что то в этот inputfield, то символ вводится 2 раза, то есть вводишь допустим "1", а выводится "11", и удалить их нельзя, и вопрос что это такое? У меня есть подозрение что это из за "return ch", типо нужно использовать что то вроде "return (char)0", но не знаю, не проверял, это только предположение. И как если закомментировать те строчки, то на пк вообще нечего нельзя ввести