新答案,解决了问题,请参阅评论以进行澄清:
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);
他们讨论事件系统的“锁定”部分的其他帖子。
旧答案,没有解决问题,但有助于理解下面的评论线索:
我的理解
我没有使用 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
文档截图