Unity 文字的宽高自适应

本文介绍了一种在Unity中使文字组件自动扩展宽度和高度的方法,通过使用TitleText、VerticalLayout和HorizontalLayout等组件结合ContentSizeFilter,实现文字的自适应布局,避免了警告信息的出现。

Unity 文字的宽度自适应

之前的做法是在Text里放ContentSizeFilter,

父节点放HorizontalLayout和ContentSizeFilter,

Text里的ContentSizeFilter总是出现警告
“…parent has a type of layout group component…”,

这个方法不会出那个警告,但是没搞懂原理,先做一个记录吧。

1,TitleText只放一个Text

2,Title放一个VerticalLayout

ControlChildSize 勾选

在这里插入图片描述

3,最外层TablePrefab放HorizontalLayout和ContentSizeFilter

在这里插入图片描述

这样就可以实现根据文字自动扩展宽度和高度。

### 实现 Unity文字大小的自适应Unity 中实现文字大小基于容器或内容尺寸自动调整的功能,主要依赖于 `TextMeshPro` 组件及其内置功能。对于 UI 文字对象来说,可以利用 `TMP_Text` 的 `enableAutoSizing` 属性以及设定最小和最大字体大小来达到这一目的。 当启用自动缩放时,Unity 会根据指定区域内的可用空间动态调整文本的字号以确保所有字符都能完全显示而不被裁剪。下面是一个具体的配置方法: #### 使用 TextMeshPro 进行设置 1. **创建并配置 TMP_Text** 首先,在场景中添加一个 Canvas 和相应的 Panel 或其他类型的布局组件作为父级对象。接着向此面板内加入带有 `TextMeshPro - UIText` 组件的游戏对象,并将其命名为 "AdaptiveText"。 2. **调整 Inspector 设置** 打开 AdaptiveText 对象上的 `TextMeshPro - UIText` 脚本字段,找到 Font Size 下拉菜单中的 Auto-Size 子项。勾选 Enable Autosize 复选框开启该特性;随后定义 Minimum 和 Maximum 值用于限定最终呈现出来的实际字体范围[^3]。 ```csharp using UnityEngine; using TMPro; public class AutoResizeText : MonoBehaviour { public float minFontSize = 8f; // 最小字体大小 public float maxFontSize = 40f; // 最大字体大小 private void Start() { var textComponent = GetComponent<TMP_Text>(); if(textComponent != null){ textComponent.enableAutoSizing = true; textComponent.fontSizeMin = minFontSize; textComponent.fontSizeMax = maxFontSize; AdjustTextToFitContainer(); } } /// <summary> /// 根据容器调整文本大小 /// </summary> private void AdjustTextToFitContainer(){ RectTransform rectTransform = transform as RectTransform; Vector2 preferredSize = GetComponent<TMP_Text>().GetPreferredValues(rectTransform.rect.width); float targetHeight = Mathf.Clamp(preferredSize.y, minFontSize, maxFontSize); while(Mathf.Abs(targetHeight - preferredSize.y) > 1 && !Mathf.Approximately(targetHeight,preferredSize.y)){ GetComponent<TMP_Text>().fontSize = targetHeight; preferredSize = GetComponent<TMP_Text>().GetPreferredValues(rectTransform.rect.width); targetHeight = Mathf.MoveTowards(targetHeight, preferredSize.y, Time.deltaTime * 5); } } } ``` 这段代码展示了如何通过编程方式控制 `TextMeshPro` 组件的文字大小使其能够适配不同的容器度。它会在启动时计算适合当前矩形变换器比例的最佳字体度,并逐步逼近直至满足条件为止。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thinbug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值