gpt4 book ai didi

unity-game-engine - 如何使 Textmesh Pro 输入字段在回车键上取消选择?

转载 作者:行者123 更新时间:2023-12-02 16:12:27 28 4
gpt4 key购买 nike

我有一个输入字段,其中包含一些有关选择和取消选择的重要处理程序。还有它的设置:

enter image description here

没有其他任何改变;我不包括这些处理程序,因为没有它们,问题也可以重现。

<小时/>

期望

当我按 Enter 时,输入字段会确认输入、取消选择并调用事件。这同样适用于 Esc 键,只是应取消输入。

现实

当我按 Enter 时,输入字段似乎保持选中状态,未调用事件处理程序,但我无法键入文本,如果我再次按 Enter,输入字段似乎会再次激活(它选择所有文本并我启用了聚焦 - 全选)。 Esc 键也有同样的问题。

<小时/>

我发现按下 Enter 键时会调用 On End Edit 事件,但如何取消选择输入字段?它应该调用 On Deselect 事件,并且不应在 Enter 时再次激活。我尝试调用 DeactivateInputField,但没有成功。

最佳答案

新答案,解决了问题,请参阅评论以进行澄清:

TextMesh Pro 使用 Unity 内置的 EventSystem。为此,取消选择等都是通过EventSystem完成的:

EventSystem.current.SetSelectedGameObject(null);

因此,“OnDeselect”事件是通过 EventSystem 的选择管理调用的,而不是 TextMesh Pro。

当您使用事件系统选择新内容时,您还需要确保当前未以锁定方式选择其他内容。 EventSystem 中有一个保护/锁定,可以防止在这种情况下设置未选择的对象,但会打印错误:

Attempting to select while already selecting an object.
UnityEngine.EventSystems.EventSystem:SetSelectedGameObject(GameObject)

您应该检查它是否已经选择了另一个对象:

var eventSystem = EventSystem.current;
if (!eventSystem.alreadySelecting) eventSystem.SetSelectedGameObject (null);

Other post where they discuss the 'lock' part of the EventSystem.

<小时/><小时/><小时/>

旧答案,没有解决问题,但对于理解下面的评论轨迹很有用:

我的理解

我没有使用 TextMesh Pro 的经验,因此我无法确定按下 Enter 键时事件的循环如何。

但是,您解释说它至少调用了“On End Edit”方法。如果我是你,我会查看他们的文档并测试它调用的其他方法。因为这应该可以帮助您更好地了解正在发生的事情。调用了哪些方法等等。

做什么?

TextMesh Pro 文档显示了适用于其生命周期/事件各个部分的各种可用方法。

Documentation

其中之一是

public void DeactivateInputField()

另一个是

protected override void DoStateTransition(SelectionState state, bool instant)

我怀疑其中之一可以用于按照您的意图停用该字段。如果您在正确的时间手动调用它们。

如何检查当前处理事件的锁定状态的示例,可以在此链接中查看:https://answers.unity.com/questions/1315276/event-system-setselectedgameobject-error-but-code.html

<小时/>

文档截图

Image from documentation

关于unity-game-engine - 如何使 Textmesh Pro 输入字段在回车键上取消选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56145437/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com