经过测试,要用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();
}