首页 > 其他分享 >Unity UGUI的ContentSizeFitter(内容尺寸适应器)组件的介绍及使用

Unity UGUI的ContentSizeFitter(内容尺寸适应器)组件的介绍及使用

时间:2023-07-20 12:02:41浏览次数:44  
标签:ContentSizeFitter Fit Preferred Unity GetComponent UGUI SetLayoutHorizontal Size

Unity UGUI的ContentSizeFitter(内容尺寸适应器)组件的介绍及使用

1. 什么是ContentSizeFitter组件?

ContentSizeFitter是Unity UGUI中的一个组件,用于自动调整UI元素的大小,以适应其内容的大小变化。它可以根据内容的大小自动调整UI元素的宽度和高度,确保内容不会被截断或溢出。

2. ContentSizeFitter的工作原理

ContentSizeFitter组件通过监听UI元素的子元素的大小变化,自动调整UI元素的大小。它可以根据子元素的大小自动调整UI元素的宽度和高度,以确保子元素的内容不会被截断或溢出。

3. ContentSizeFitter的常用属性

  • Horizontal Fit:水平适应方式,可选值为Unconstrained(不限制)、Preferred Size(首选大小)和 Min Size(最小大小)。
  • Vertical Fit:垂直适应方式,可选值为Unconstrained(不限制)、Preferred Size(首选大小)和 Min Size(最小大小)。

4. ContentSizeFitter的常用函数

  • SetLayoutHorizontal():手动调用此函数可以强制更新水平适应方式。
  • SetLayoutVertical():手动调用此函数可以强制更新垂直适应方式。

5. ContentSizeFitter的使用示例

示例1:自动调整按钮大小以适应文本内容

  1. 创建一个按钮,并添加一个Text组件作为子元素。
  2. 将ContentSizeFitter组件添加到按钮上。
  3. 将Horizontal Fit属性设置为Preferred Size,Vertical Fit属性设置为Preferred Size。
  4. 编写脚本,在Start函数中调用SetLayoutHorizontal()和SetLayoutVertical()函数。
using UnityEngine;
using UnityEngine.UI;

public class ButtonAutoSize : MonoBehaviour
{
    private Button button;
    private Text text;

    private void Start()
    {
        button = GetComponent<Button>();
        text = GetComponentInChildren<Text>();

        button.GetComponent<ContentSizeFitter>().SetLayoutHorizontal();
        button.GetComponent<ContentSizeFitter>().SetLayoutVertical();
    }
}

示例2:自动调整面板大小以适应子元素

  1. 创建一个面板,并添加一些子元素。
  2. 将ContentSizeFitter组件添加到面板上。
  3. 将Horizontal Fit属性设置为Preferred Size,Vertical Fit属性设置为Preferred Size。
  4. 编写脚本,在Start函数中调用SetLayoutHorizontal()和SetLayoutVertical()函数。
using UnityEngine;
using UnityEngine.UI;

public class PanelAutoSize : MonoBehaviour
{
    private RectTransform panel;

    private void Start()
    {
        panel = GetComponent<RectTransform>();

        panel.GetComponent<ContentSizeFitter>().SetLayoutHorizontal();
        panel.GetComponent<ContentSizeFitter>().SetLayoutVertical();
    }
}

示例3:自动调整滚动视图大小以适应内容

  1. 创建一个滚动视图,并添加一些子元素。
  2. 将ContentSizeFitter组件添加到滚动视图的Content上。
  3. 将Horizontal Fit属性设置为Preferred Size,Vertical Fit属性设置为Preferred Size。
  4. 编写脚本,在Start函数中调用SetLayoutHorizontal()和SetLayoutVertical()函数。
using UnityEngine;
using UnityEngine.UI;

public class ScrollViewAutoSize : MonoBehaviour
{
    private RectTransform content;

    private void Start()
    {
        content = GetComponent<ScrollRect>().content;

        content.GetComponent<ContentSizeFitter>().SetLayoutHorizontal();
        content.GetComponent<ContentSizeFitter>().SetLayoutVertical();
    }
}

示例4:自动调整网格布局大小以适应子元素

  1. 创建一个网格布局,并添加一些子元素。
  2. 将ContentSizeFitter组件添加到网格布局的Content上。
  3. 将Horizontal Fit属性设置为Preferred Size,Vertical Fit属性设置为Preferred Size。
  4. 编写脚本,在Start函数中调用SetLayoutHorizontal()和SetLayoutVertical()函数。
using UnityEngine;
using UnityEngine.UI;

public class GridLayoutAutoSize : MonoBehaviour
{
    private GridLayoutGroup gridLayout;

    private void Start()
    {
        gridLayout = GetComponent<GridLayoutGroup>();

        gridLayout.GetComponent<ContentSizeFitter>().SetLayoutHorizontal();
        gridLayout.GetComponent<ContentSizeFitter>().SetLayoutVertical();
    }
}

示例5:自动调整水平布局大小以适应子元素

  1. 创建一个水平布局,并添加一些子元素。
  2. 将ContentSizeFitter组件添加到水平布局的Content上。
  3. 将Horizontal Fit属性设置为Preferred Size,Vertical Fit属性设置为Preferred Size。
  4. 编写脚本,在Start函数中调用SetLayoutHorizontal()和SetLayoutVertical()函数。
using UnityEngine;
using UnityEngine.UI;

public class HorizontalLayoutAutoSize : MonoBehaviour
{
    private HorizontalLayoutGroup horizontalLayout;

    private void Start()
    {
        horizontalLayout = GetComponent<HorizontalLayoutGroup>();

        horizontalLayout.GetComponent<ContentSizeFitter>().SetLayoutHorizontal();
        horizontalLayout.GetComponent<ContentSizeFitter>().SetLayoutVertical();
    }
}

注意事项

  • ContentSizeFitter组件只能用于Layout Group(布局组)的子元素上。
  • ContentSizeFitter组件的调整是在布局计算之后进行的,因此需要手动调用SetLayoutHorizontal()和SetLayoutVertical()函数来更新布局。

参考资料

标签:ContentSizeFitter,Fit,Preferred,Unity,GetComponent,UGUI,SetLayoutHorizontal,Size
From: https://blog.51cto.com/u_7509448/6784089

相关文章

  • unity3d unitywebrequest
    Unity3D中的UnityWebRequest是用于发送HTTP请求和处理HTTP响应的类。它提供了一种方便的方式来从服务器获取数据,例如从Web服务器的数据库中检索数据,并通过HTTP请求将数据发送回Unity3D应用程序。使用UnityWebRequest类,您可以执行以下操作:创建请求:您可以使用UnityWebRequest类......
  • 为什么unity里的异步加载要配合协程使用
      在Unity中,异步加载资源时需要配合协程使用的原因是为了避免阻塞主线程。在游戏开发中,资源加载通常是一个耗时的操作,如果在主线程中进行同步加载,会导致游戏卡顿或者无响应,影响用户体验。使用协程可以将资源加载操作放在后台线程中进行,然后在加载完成后再将结果返回到主线程......
  • Unity资源&&配置存档路径问题
    stringdir=Application.persistentDataPath;//万能路径,打包前打包后移动端都可用,该路径可读、可写,但是只能在程序运行时才能读写操作,不能提前将数据放入这个路径。#ifUNITY_EDITORdir=Application.streamingAssetsPath;//打包前可用#endif#if(UNITY_ANDRO......
  • Unity游戏存档读档的几种方式
    1.二进制privatestaticvoidSaveByBinary(){//创建二进制格式化程序BinaryFormatterbf=newBinaryFormatter();//创建一个文件流FileStreamfs=File.Create(GetFilePath(SaveDataType));//二进制方法序列化对象......
  • Unity 协程详解
    在程序开发时,光是了解协程怎么用是远远不够的,因为当程序出现一些有关于协程的错误时,理解协程的原理就十分有必要性了。1.协程使用的一些问题我们知道如果在Unity中编写一个死循环,会造成运行游戏时整个Unity编辑器卡死,而协程函数在使用时好像是可以与Update函数并行不斥......
  • Unity下载安装包并进行安装
    项目上要做更新,还没学热更新,要做到游戏内部下载安装包并进行安装的效果,项目不采用Url转跳默认下载器的方式。Url转跳下载方式Application.OpenURL(URL);用这个转跳你的Nginx下载路径就行了,项目上不让用这种方式Unity内下载安装包Unity调用安卓安装安装包参考文章待整理......
  • 在Unity3D中使用ScriptableObject进行序列化
    ScriptableObject类型经常用于存储一些unity3d本身不可以打包的一些object,比如字符串,一些类对象等。用这个类型的子类型,则可以用BuildPipeline打包成assetbundle包供后续使用,非常方便。这样除了playerpref和c#文件读取外,另外的一种存取一些数据对象的方法1.usingUnityEngine;......
  • unity3D制作并使用Assetbundles方法
    在网页中为了控制.unity文件的大小,加速载入速度,可以把系统用到的资源制作成Assestbundles,根据需要进行动态的加载和卸载。具体作法:1、使用脚本重新定义系统菜单,添加一个制作Assetbunles的菜单命令://C#Example//Buildsanassetbundlefromtheselected......
  • Unity3D_根据不同的屏幕缩放UI(在横屏上运行竖屏软件)
    一、首先我们创建一个1080*1920分辨率的场景 效果如下二、随便添加一张UI图片三、打包出来看效果(我们发现UI显示不全,这是因为UI的尺寸任然是1080*1920,而我们的电脑是1920*1080) 四、我们在Unity中做以下设置1.选中游戏物体Canvas2.点击组件CanvasScaler上的UISc......
  • Unity3D 游戏实战开发之英雄联盟
    本次游戏项目为类dota游戏中的经典之作《英雄联盟》,向经典致敬。通过本次课程,你会学到网游开发模式、C#服务器开发、协议定制、Unity5.0新特性开发、UGUI应用、同步方案、解决问题思路、各种扩展工具的开发………! 演示地址:www.runruncode.com/video-game/19444.html ......