Unity 预制体 Panel 中 PostGUI 文字输入框自动换行和滚动
要实现字幕换行并自动向下滚动的效果,可以按照以下步骤进行操作:
- 在 Unity 中打开预制体的 Panel,并选中 PostGUI 下的文字输入框。
- 添加一个脚本,用于控制文字输入框的滚动行为。
- 在脚本中,获取文字输入框的 RectTransform 和 ScrollRect 组件。
- 在 Start 方法中,获取文字输入框的高度和行数,并根据行数计算出每一行的高度。
- 在 Update 方法中,判断文字输入框的内容是否超出最大行数,如果超出,则通过修改 RectTransform 的 anchoredPosition.y 属性实现滚动效果。
- 在文字输入框的 OnValueChanged 事件中,更新文字输入框的内容,并在内容改变后调用计算行数和高度的方法。
- 在文字输入框的 OnEndEdit 事件中,重新计算行数和高度,并滚动到最底部。
以下是一个示例脚本的代码:
using UnityEngine;
using UnityEngine.UI;
public class ScrollableInputField : MonoBehaviour
{
public int maxLines = 5; // 最大行数
public float lineHeight = 30f; // 每一行的高度
private InputField inputField;
private RectTransform inputFieldRectTransform;
private ScrollRect scrollRect;
private float contentHeight;
private void Start()
{
inputField = GetComponent<InputField>();
inputFieldRectTransform = inputField.GetComponent<RectTransform>();
scrollRect = GetComponentInParent<ScrollRect>();
CalculateContentSize();
}
private void Update()
{
if (inputField.textComponent.preferredHeight > contentHeight)
{
// 超出最大行数时,向下滚动
float scrollHeight = inputFieldRectTransform.rect.height - contentHeight;
float scrollPosition = inputField.preferredHeight - inputFieldRectTransform.rect.height;
inputFieldRectTransform.anchoredPosition = new Vector2(0, scrollPosition);
}
}
public void OnValueChanged()
{
inputField.textComponent.text = inputField.text.Replace('
', ''); // 去掉换行符
CalculateContentSize();
}
public void OnEndEdit()
{
CalculateContentSize();
scrollRect.verticalNormalizedPosition = 0; // 滚动到最底部
}
private void CalculateContentSize()
{
int lineCount = Mathf.Min(maxLines, inputField.text.Split('
').Length);
contentHeight = lineHeight * lineCount;
inputFieldRectTransform.sizeDelta = new Vector2(inputFieldRectTransform.sizeDelta.x, contentHeight);
}
}
将该脚本添加到 PostGUI 下的文字输入框上,并设置最大行数和每一行的高度。然后,运行游戏时,文字输入框将根据内容自动换行,并在超出最大行数时自动向下滚动。
原文地址: http://www.cveoy.top/t/topic/bGob 著作权归作者所有。请勿转载和采集!