Unity 常见问题 之 添加 ContentSizeFitter 组件后 RectTransform 的 sizeDelta 不能实时获取最新变化 size 的问题

Unity 常见问题 之 添加 ContentSizeFitter 组件后 RectTransform 的 sizeDelta 不能实时获取最新变化size 的问题

目录

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);
        }
    }
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

仙魁XAN

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

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

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

打赏作者

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

抵扣说明:

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

余额充值