tro*_*har 7 unity-game-engine unity3d-ui
我有一个输入字段,其中包含一些有关选择和取消选择的重要处理程序。它的设置有:
其他什么都没有改变;我不包括这些处理程序,因为没有它们问题也可以重现。
当我按 Enter 时,输入字段会确认输入、取消选择并调用事件。Esc 键也是如此,只是要取消输入。
当我按 Enter 时,输入字段似乎保持选中状态,未调用事件处理程序,但我无法键入文本,如果我再次按 Enter,输入字段似乎会再次激活(它选择所有文本,并且我已打开)焦点 - 选择全部启用)。Esc 键也有同样的问题。
我发现按下 Enter 键时会调用On End Edit事件,但如何取消选择输入字段?它应该调用On Deselect事件,并且不应在 Enter 时再次激活。我尝试拨打电话DeactivateInputField,但没有成功。
新答案,解决了问题,请参阅评论以进行澄清:
TextMesh Pro 使用 Unity 的内置EventSystem. 因此,取消选择等操作是通过以下方式完成的EventSystem:
EventSystem.current.SetSelectedGameObject(null);
Run Code Online (Sandbox Code Playgroud)
因此“OnDeselect”事件是通过EventSystem选择管理来调用的,而不是TextMesh Pro。
当您使用事件系统选择新内容时,您还需要确保当前没有以锁定方式选择其他内容。有一个保护/锁定EventSystem,它可以防止在这种情况下设置未选择的对象,但它会打印错误:
已选择对象时尝试选择。
UnityEngine.EventSystems.EventSystem:SetSelectedGameObject(GameObject)
您应该检查它是否已经选择了另一个对象:
var eventSystem = EventSystem.current;
if (!eventSystem.alreadySelecting) eventSystem.SetSelectedGameObject (null);
Run Code Online (Sandbox Code Playgroud)
旧答案,没有解决问题,但对于理解下面的评论轨迹很有用:
我的理解
我没有使用 TextMesh Pro 的经验,因此我无法确定按下 Enter 键时事件的循环如何。
但是,您解释说它至少调用“On End Edit”方法。如果我是你,我会查看他们的文档并测试它调用的其他方法。因为这应该可以帮助您更好地了解正在发生的事情。调用了哪些方法等等。
该怎么办?
TextMesh Pro 文档显示了适用于其生命周期/事件的各个部分的各种可用方法。
其中之一是
public void DeactivateInputField()
Run Code Online (Sandbox Code Playgroud)
另一个是
protected override void DoStateTransition(SelectionState state, bool instant)
Run Code Online (Sandbox Code Playgroud)
我怀疑其中之一可以用于按照您的意图停用该字段。如果您在正确的时间手动呼叫他们。
有关如何检查当前处理事件的锁定状态的示例,请参见以下链接:https: //answers.unity.com/questions/1315276/event-system-setselectedgameobject-error-but-code.html
文档截图
| 归档时间: |
|
| 查看次数: |
12209 次 |
| 最近记录: |