赞
踩
目录
Unity 常见问题 之 添加 ContentSizeFitter 组件后 RectTransform 的 sizeDelta 不能实时获取最新变化size 的问题
Unity 问题整理,自己整理的一些 Unity 开发可能遇到的问题,方便后期游戏开发。
本节介绍,在使用ContentSizeFitter进行动态尺寸变化配置的时候,有时候需要获取ContentSizeFitter组件上的RectTransform 的 sizeDelta的size ,但是会遇到不能实时获取到的问题,这里做一个简单的该问题解决方法的记录,如果你有更好的方法,欢迎留言交流。
如图,
1、Text 添加了 ContentSizeFitter
2、在Text 变化的时候,获取 Text 的 RectTransform 的 sizeDelta 值
3、会发现获取 sizeDelta 的值不是实时的,老是滞后
4、问题测试代码
- using UnityEngine.UI;
-
- public class TestContentSizeFitter : MonoBehaviour
- {
- [SerializeField]private Text m_Text;
- private RectTransform m_TextRectTransform;
-
- // Start is called before the first frame update
- void Start()
- {
- m_TextRectTransform = m_Text.GetComponent<RectTransform>();
- }
-
- // Update is called once per frame
- void Update()
- {
- if (Input.GetKeyDown(KeyCode.Space))
- {
- m_Text.text += " New Text New Text New Text New Text New Text";
- Debug.Log(" m_TextRectTransform.sizeDelta: " + m_TextRectTransform.sizeDelta);
- }
- }
- }
在使用 ContentSizeFitter 实时调整Text 数据的调整 RectTransform尺寸时,这时Canvas 还没有 Rebuild,需要及时获取到实时的数据,此时需要自己收到立即针对该RectTransform 进行重建步骤,就可以获取到实时的数据了
1、解决原理:获取前添加如下代码,及时 Rebuild
LayoutRebuilder.ForceRebuildLayoutImmediate(m_TextRectTransform); // m_TextRectTransform 是你的 RectTransform
2、如图,添加后实时获取到了 Text 的 RectTransform 的 sizeDelta 值
3、添加后的测试代码
- using UnityEngine.UI;
-
- public class TestContentSizeFitter : MonoBehaviour
- {
- [SerializeField]private Text m_Text;
- private RectTransform m_TextRectTransform;
-
- // Start is called before the first frame update
- void Start()
- {
- m_TextRectTransform = m_Text.GetComponent<RectTransform>();
- }
-
- // Update is called once per frame
- void Update()
- {
- if (Input.GetKeyDown(KeyCode.Space))
- {
- m_Text.text += " New Text New Text New Text New Text New Text";
- // 获取前手动 Rebuild
- LayoutRebuilder.ForceRebuildLayoutImmediate(m_TextRectTransform);
- Debug.Log(" m_TextRectTransform.sizeDelta: " + m_TextRectTransform.sizeDelta);
- }
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。