[Unity] Inputfield光标移动到最后(不选中内容)
经过测试,要用Inputfield实现光标末尾显示但不选中内容非常麻烦,要么会选中全部,要么采用下面这种延迟显示,但会有明显的变化中间过程:
protected override void OnPanelEnter()
{
// 先激活输入框(这里的InputField是成员变量不是类名)
InputField.ActivateInputField();
// 确保当前帧结束后执行,避免其他逻辑干扰
StartCoroutine(SetCaretPositionNextFrame());
}
private IEnumerator SetCaretPositionNextFrame()
{
// 等待一帧
yield return null;
// 设置光标位置到末尾
InputField.caretPosition = InputField.text.Length;
InputField.selectionAnchorPosition = InputField.caretPosition;
InputField.selectionFocusPosition = InputField.caretPosition;
}
因此使用InputMesh(TMP)替代,取消勾选ControlSettings的OnFocus-SelectAll,但是字体文件需要特殊处理:选中字体文件,右键Create->TextMeshPro->FontAsset,然后拖动到InpuField(TMP)里面Placeholder和Text的TextMeshPro组件上:



最后这么调用即可:
protected override void OnPanelEnter()
{
// (这里的InputField是成员变量不是类名)
InputField.DeactivateInputField();
InputField.caretPosition = InputField.text.Length;
InputField.ActivateInputField();
}

浙公网安备 33010602011771号