Новый ответ, решение проблемы, см. Комментарии для уточнения:
TextMesh Pro использует встроенный Unity EventSystem
.По этой причине отмена выбора и тому подобное осуществляется через EventSystem
:
EventSystem.current.SetSelectedGameObject(null);
. Таким образом, событие «OnDeselect» вызывается через EventSystem
управление выборами, а не TextMesh Pro.
Когда вы выбираете что-то новое в системе событий, вам также нужно убедиться, что что-то еще не выбрано в настоящий момент так, чтобы это блокировало.В EventSystem
имеется защита / блокировка, которая не позволяет устанавливать ни один объект, выбранный в этом случае, но выдает ошибку:
Попытка выбора при выборе объекта.
UnityEngine.EventSystems.EventSystem: SetSelectedGameObject (GameObject)
Вы должны проверить, выбирает ли он уже другой объект:
var eventSystem = EventSystem.current;
if (!eventSystem.alreadySelecting) eventSystem.SetSelectedGameObject (null);
Другой пост, где обсуждается часть блокировкиEventSystem.
Старый ответ, не решил проблему, но полезен для понимания следа комментариев ниже:
Мое понимание
У меня нет опыта работы с TextMesh Pro, поэтому я не могу точно сказать, как проходит цикл событий, когда вы нажимаете клавишу Enter.
Однако выобъясните, что он по крайней мере вызывает метод «On End Edit».Я бы посмотрел их документацию и проверил, какие другие методы он вызывает, если бы я был вами.Потому что это должно помочь вам лучше понять, что происходит.Какие методы вызываются и т. Д.
Что делать?
Документация TextMesh Pro показывает различные доступные методы для различных частей его жизненного цикла / событий.
Документация
Один из них
public void DeactivateInputField()
Другой -
protected override void DoStateTransition(SelectionState state, bool instant)
Я подозреваю, что один из них может быть использован длядеактивировать поле, как вы собираетесь.Если вы вызываете их вручную в нужное время.
Пример того, как проверить состояние блокировки текущего обработанного события, можно увидеть по этой ссылке: https://answers.unity.com/questions/1315276/event-system-setselectedgameobject-error-but-code.html
Снимок экрана из документации