Unity 背景图片自适应Text长度

该博客介绍了如何在Unity中通过自定义脚本UIChildSizeMgr和使用ContentSizeFitter组件,实现Text组件尺寸随关联对象自动调整。通过为Text添加脚本并配置参数,可以轻松实现多个对象的尺寸同步,简化UI布局工作。
摘要由CSDN通过智能技术生成

前言

用Unity自带插件也可以实现同样效果,可以参考这篇文章。不过封装成脚本使用更方便,而且可以同时添加多个对象。

效果

请添加图片描述

使用方法

给Text组件挂上UIChildSizeMgr脚本和ContentSizeFitter组件,设置如图所示,文字图片对齐方向调整锚点即可。一个Text组件可以关联多个对象,具体参数根据需求调配。
2.UIChildSizeMgr脚本

代码

using System;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System.Text;
using UnityEngine;

[ExecuteInEditMode]
public class UIChildSizeMgr : UIBehaviour
{
    public FollowItem[] follows;
    private bool bChange = true;

    [Serializable]
    public class FollowItem
    {
        public RectTransform follower;
        public RectOffset padding;
        public bool followWidth = true;
        public bool followHeight = true;

        public void SetSize(RectTransform trans)
        {
            if (null == trans || null == follower)
                return;
            if (followWidth)
            {
                float width = padding.left + padding.right + trans.rect.width;
                follower.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, width);
            }
            if (followHeight)
            {
                float height = padding.top + padding.bottom + trans.rect.height;
                follower.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, height);
            }
        }

    }

    protected override void Awake()
    {
        base.Awake();
        bChange = true;
        ResetSize();
    }


    void ResetSize()
    {
        if (!bChange) return;
        RectTransform rectTrans = transform as RectTransform;

        if (null == follows) return;
        for (int i = 0, max = follows.Length; i < max; i++)
        {
            follows[i].SetSize(rectTrans);
        }
       
        bChange = false;
    }

    protected override void OnEnable()
    {
        base.OnEnable();
        bChange = true;
        ResetSize();
    }

    protected override void OnRectTransformDimensionsChange()
    {
        bChange = true;
        ResetSize();
    }

#if UNITY_EDITOR
    void Update()
    {
        if (!Application.isPlaying)
        {
            bChange = true;
            ResetSize();
        }
    }
#endif
}

Unity中,可以通过调用RectTransform组件的AdaptiveUI方法来实现图片的大小自适应。首先,你需要一个UI父物体或者单独的UI元素,然后在Awake方法中调用相应的方法即可实现自适应。比如,你可以在脚本中创建一个UITest类,在Awake方法中调用UIImage的AdaptiveUIImage方法来实现图片大小的自适应。以下是一个示例代码: ```csharp public class UITest : MonoBehaviour { public RectTransform UIParent; public Image UIImage; void Awake() { UIParent.AdaptiveUI(); UIImage.AdaptiveUIImage(); } } ``` 在Awake方法中,可以根据屏幕的宽高比例来计算需要缩放的比例,然后通过transform.localScale来进行缩放。以下是一个示例代码: ```csharp private void Awake() { float p1 = (float)Screen.width / 1028f; float p2 = (float)Screen.height / 600f; float p = p1 < p2 ? p1 : p2; transform.localScale = Vector3.one * p; } ``` 这样,图片就会根据屏幕的宽高比例进行自适应调整大小。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Unity UI自适应 Image自适应宽高 Text自适应宽高](https://blog.csdn.net/CTangZe/article/details/118211091)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Unity 实现UI自适应](https://blog.csdn.net/slf_tragon/article/details/130935444)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我寄人间雪满头丶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值