我正在为游戏创建UI。我已经创建了诸如动画按钮和多选项开关之类的简单元素,但是输入字段存在问题。
现在就是这样。
射线广播接收区域应与文本大小相同。
文本轴应为(0.5,0.5),因为动画会更改其比例。当长文本不围绕中心缩放时,效果不好。射线广播区域不应受缩放比例的影响。
input-32 具有 Layout元素,且 Flexible Width 设置为1,因此它应填充所有可用空间。 文本区域具有一个水平布局组(参见图片)。里面有一个灵活宽度设置为1的空格,一个占位符和一个文本。
它现在可以工作:
选择位置错误,并且文本有时会不可控制地向左飞。输入字段似乎不希望文本和占位符以外的其他元素出现在此处,并且好像它们不存在一样起作用。
确定,然后将分隔符直接放在 input-32 下。但是,行为是完全一样的。
我发现向文本元素添加 Content Size Fitter 时,该字段中断。但是,如何控制它的宽度(取决于光线投射)?也许我不应该调整文本的大小,而应该覆盖其光线投射,但是我不知道该怎么做。
我不得不承认,我不了解TextMeshPro输入字段如何在低级别工作,这就是为什么我的尝试失败的原因。你能帮我还是至少给个提示?
答案 0 :(得分:0)
我像您一样尝试了ContentSizeFitter
和HorizontalLayoutGroup
的几种组合,但效果不佳。我还尝试制作自定义尺寸的钳工。最后,我创建了一个简单的组件,该组件仅调整文本字段的大小以匹配每帧文本的首选大小。可以对其进行一些优化,但是在我的测试中效果很好。我认为从UI的布局系统中移出调整大小可以解决插入符号的问题-插入符号在布局系统中移动并且两件事相互冲突。
我用这种方法注意到的唯一问题是输入末尾的空格不会影响文本的“首选大小”(不确定原因),因此文本字段不会扩展以显示这个。
您还应该删除“文本区域”游戏对象上的RectMask2D
组件,因为将其保留在那里会切断插入符号的一半(在您的情况下不是必需的)。
将此脚本添加到您的对象上,并在TMP_InputField
上添加
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class ResizeInputToMatchText : MonoBehaviour
{
private RectTransform m_Rect;
private RectTransform m_inputFieldRect;
private RectTransform rectTransform
{
get
{
if (m_Rect == null)
m_Rect = GetComponent<RectTransform>();
return m_Rect;
}
}
private RectTransform inputFieldTextRectTransform
{
get
{
if (m_inputFieldRect == null)
m_inputFieldRect = GetComponent<TMP_InputField>().textComponent.rectTransform;
return m_inputFieldRect;
}
}
private void Update()
{
rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, LayoutUtility.GetPreferredSize(inputFieldTextRectTransform, 0));
inputFieldTextRectTransform.localPosition = Vector3.zero; // stops the text scrolling sideways - it doesn't need to
}
}